pythonでGUIアプリを作りたい
pythonでGUIアプリをつくるとき、今までpygameというライブラリを使っていたのですが、どうもkivyというやつがモダンらしいので、MacとRaspberry Piで試してみました。
Macの環境はMac Book Pro (Retina 2012)とMac OS X 10.10.5。Raspberry Piの環境はRaspberry Pi 3 + Raspbian Jessieで確認しました。
Mac OSへのkivyインストール
以下のコマンドを実行。
$ brew install sdl2 sdl2_image sdl2_ttf sdl2_mixer gstreamer
$ pip install -I Cython==0.23
$ USE_OSX_FRAMEWORKS=0 pip install kivy
Raspberry Piへのkivyインストール
以下参照にRaspberry Piの基本的なインストールまでは完了している前提です。
以下のコマンドを実行。
$ sudo apt-get update
$ sudo apt-get install -y libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev \
pkg-config libgl1-mesa-dev libgles2-mesa-dev \
python-setuptools libgstreamer1.0-dev git-core \
gstreamer1.0-plugins-{bad,base,good,ugly} \
gstreamer1.0-{omx,alsa} python-dev cython
$ sudo pip install -I Cython==0.23
$ sudo pip install git+https://github.com/kivy/kivy.git@master
公式サイトには3行目の$ sudo pip install -I Cython==0.23
記載はないですが、オプション実行せずにインストールしたら、以下のエラーが出たので修正しました。
raise ImportError('Incompatible Cython Version')
GUIアプリテスト
hello_world.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()
以下実行するとGUIのアプリが走ります。
$ python hello_world.py
Macでの実行結果
Raspberry PiではVNC経由で動作したら動かなくて変だなと思って、直接ディスプレイ接続したら全画面に表示されてました。
まとめ
本当はkivyをRaspberryPi + piTFTの組み合わせで使いたいなと考えていたのですが、piTFTとRaspberry PiはSPI接続だからOpenGLES使うkivyは表示できないみたいです。fbcpを使うと解決できるかと思ったのですが、fbcp使うとタッチが使えなくなるのでこれまた問題です。そもそも、fbcpでもうまく表示したい画面を表示することができませんでした。残念。piTFTの場合は、以下参考にpygameで使うのが良さそう。