MyEnigma

とある自律移動システムエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

PythonのマルチプラットフォームGUIライブラリkivyを使ってMac, Ubuntu, iOS用のGUIアプリを作る方法

目次

はじめに

先日、

PythonのGUIライブラリPyQtの使い方を紹介しました。

myenigma.hatenablog.com

 

PyQtは使いやすいですし、

綺麗なGUIが作れるので良いのですが、

2つ問題があります。

 

1. iOS,AndroidのGUIを作ることはできない。

PyQtは基本的にWindows, Mac, Linuxなどの

コンピューター上のみの対応で、

スマホや、タブレットには対応していません。

(swiftやPythonista for iOSを使えば良いという声も聞こえてきそうですが、

Pythonで無料&単一ソースコードが理想です。)

 

2. ライセンスが微妙

PyQtはGPL or 商用ライセンスのライセンス形態なので、

個人的に遊ぶ分には問題無いと思いますが、

もしかしたら仕事で使うかもしれないと思うと、

色々悩ましいと思います。

(PySideというLPGLの実装形態もありますが、

こちらは実装が古いようです。)

 

そこで、上記の問題を解決するような

PythonのマルチプラットフォームGUIライブラリを探した所、

KivyというOSS GUIライブラリを見つけました。

kivy.org

github.com

 

kivyは、

Windows, OS X, Linuxだけでなく、

iOSやAndroidにも対応しています。

またライセンスもMITで安心です。

 

今回の記事では、

kivyの概要とインストール方法、

そして、kivyを使ってMac, ubuntu, Windows, iOS上で

非常に簡単なGUIアプリを作成する方法について

説明したいと思います。

(Androidに関しては、

後日追記したいと思います。)

 

kivyとは?

Kivyはオープンソースで

クロスプラットフォームな

Python GUIフレームワークです。

マルチタッチなどのユーザインターフェイスを簡単に実装できます。

github.com

 

KivyはPythonとCythonで作成されており、

OpenGL ES 2をベースにしています。

これにより、GPUによるスムーズなレンダリングが可能になっています。

 

加えて、

Windows, OS X, Linux, Android iOS, そして、RasberryPI上で、

単一の同じコードで利用することができるのも特徴です。

 

また、

前述の通り、KivyのライセンスはMITなので、

商用、非商用の両方で使いやすい形になっています。

 

各プラットフォームへのインストール方法

各プラットフォームへのインストール方法は下記の通りです。

Macへのインストール

公式マニュアル通り、

brewとpipを使った方法でインストールできました。

$ brew install sdl2 sdl2_image sdl2_ttf sdl2_mixer gstreamer

$ pip install -I Cython==0.23

$ USE_OSX_FRAMEWORKS=0 pip install kivy

 

Macへのインストール(for iOS)

iOS用にkivyを使う場合は、

色々準備が必要です。

基本的には、下記のREADMEにある通りに

ソフトのインストールとビルドを実施します。

 

初めに、下記をインストールします。

$ xcode-select --install

$ brew install autoconf automake libtool pkg-config

$ brew link libtool

$ pip install cython==0.21

cythonのバージョンが先ほどと違うような気がしますが。。。

 

続いて、kivy-iosのソースコードをクローンして、

kivy-iosをビルドします。

$ git clone https://github.com/kivy/kivy-ios.git

$ cd kivy-ios

$ ./toolchain.py build kivy

上記のビルドは結構時間がかかりました。

(自分の場合は15分ほど)

 

あとは、下記のコマンドでtoolchain.pyを起動して、

使い方の説明が表示されたら、インストールは完了です。

$ ./toolchain.py

f:id:meison_amsl:20160506140918p:plain

 

Ubuntuへのインストール

公式のドキュメント通りでOKでした。

$ sudo add-apt-repository ppa:kivy-team/kivy

$ sudo apt-get update

$ sudo apt-get install python-kivy

 

Windowのインストール

公式のドキュメント通り、pipでインストールしました。

 

$ python -m pip install --upgrade pip wheel setuptools

$ python -m pip install docutils pygments pypiwin32 kivy.deps.sdl2 kivy.deps.glew

$ python -m pip install kivy.deps.gstreamer --extra-index-url https://kivy.org/downloads/packages/simple/

$ python -m pip install kivy

 

各プラットフォームでHello world GUIを表示する方法

続いて、

各プラットフォームにおいて、

Hello worldを表示させる

GUI Windowを作る方法について説明します。

 

まず初めに、下記のpythonコードを

適当な名前(今回はhelloworld.py)で保存します。

from kivy.app import App
from kivy.uix.button import Button

class TestApp(App):
    def build(self):
        return Button(text='Hello World')

TestApp().run()

上記のpythonコードを

各プラットフォームで実行させる方法は下記の通りです。

 

MacでのHello world GUI

上記のpythonスクリプトを起動しただけで、

Hello world GUIアプリが表示されました。

$ python ./helloworld.py

f:id:meison_amsl:20160212144051p:plain

 

UbuntuでのHello world GUI

Ubuntuも、上記のスクリプトを起動しただけで

アプリが表示されました

$ python ./helloworld.py

f:id:meison_amsl:20160212144136p:plain

 

WindowsでのHello world GUI

Windowsも、上記のスクリプトを起動しただけで

アプリが表示されましたが、

なぜかGit for Windowsについている

git bashを使った場合、

アプリがエラーで落ちてしまいました。

標準のコマンドプロンプトから起動すると

ちゃんと実行できました。

f:id:meison_amsl:20160511184747j:plain

 

iOSでのHello world GUI

iOSでGUIアプリを起動させるのは

アプリとしてiOS端末にソフトをインストールする必要があるため、

すこし手順が必要です。

また、いくつかハマり所があるので注意しましょう。

 

1. アプリのディレクトリを作成

helloworldというディレクトリを作って、

先ほどのhelloworld.pyを

main.pyという名前で、

そのディレクトリの中に保存します。

 

kivyの場合、

メインのpythonスクリプトは、

main.pyという名前である必要があるようです。

 

2. xcodeのプロジェクトを作成

下記のコマンドで

先ほどのアプリのディレクトリを元に、

xcodeのプロジェクトファイルを作成します。

$ ./toolchain.py create helloworld ../helloworld

すると、helloworld-iosというディレクトリが出来ているはずです。

 

3. xcodeのプロジェクトファイルを開く

下記のコマンドでxcodeのプロジェクトファイルを

ターミナルから開きます。

$ open open helloworld-ios/helloworld.xcodeproj

するど自動的にxcodeでプロジェクトが開きます。

 

4. xcodeでビルド

続いて、xcodeで先ほどのアプリをビルドします。

基本的には、インストールしたい端末を

Macにつなぎ、左上のデバイスの部分から端末を選び、

より左側にある三角のマークを押すと

ソフトのビルド&インストールが実行されます。

f:id:meison_amsl:20160506144206p:plain

 

しかし、自分の環境 Xcode7.3では色々エラーが発生しました。

まず初めに、

ビルドした時に

An App ID with Identifier 'org.kivy.helloworld' is not available. Please enter a different string.

というようなエラーが出た時は、

kivy-iosが自動生成するBundle Identifierという設定がおかしいので、

下記の、xcodeのGeneralのIdentityの部分の

Bundle Identifierの部分を変更します。

f:id:meison_amsl:20160506144855p:plain

今回の場合は、

helloworld201605としました。

 

続いて、ビルドした時に、

clang: error: linker command failed with exit code 1 (use -v to see invocation)

というエラーが出る時は、

下記の記事にある通り、

Bitcodeという設定がONになっているのが問題なので、

qiita.com

Build Settingの検索バーでBitcodeと検索して、

Enable BitcodeをNoにしましょう。

f:id:meison_amsl:20160506164956p:plain

 

自分の場合、

これでビルドが成功し、

端末にアプリがインストールされました。

 

5. iOSの端末でアプリを実行する

無事インストールできた場合は、

kivyのアイコンのアプリがiOS端末に

インストールされているはずなので、

そのアプリをタップすれば、

アプリが起動します。

f:id:meison_amsl:20160506170252p:plain

 

ちなみに、

インストールされたアプリをクリックしても、

開発元が信頼されていないと言われた場合は、

設定->一般->プロファイルとデバイス管理

でデベロッパAPPをクリックして

認証する必要があります。

 

下記のように、

iPhone 6SでもHello worldが表示されましたし、

f:id:meison_amsl:20160506144715j:plain

iPad miniでもHello worldが表示されました。

f:id:meison_amsl:20160506170342j:plain

 

より詳しいkivy for iOSの使い方は

下記の記事を参照下さい。

myenigma.hatenablog.com

 

kivyによるGUIの作り方

こちらを参照下さい。

myenigma.hatenablog.com

 

最後に

これでPythonでiOSアプリが作れますね(^^)。

よりPythonが好きになりそうです。

 

参考資料

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

 

MyEnigma Supporters

もしこの記事が参考になり、

ブログをサポートしたいと思われた方は、

こちらからよろしくお願いします。

myenigma.hatenablog.com