Kivy + PythonでイケてるGUIアプリを作ってみる
TL;DR
PyQtで(ライセンス的にもSAN値的にも)大幅に消耗したのでkivyを使ってみたらQOD(Quality of Developing)が向上した話
kivyって何よ
kivyは、Pythonでマルチプラットフォーム対応のGUIアプリケーションを作るためのライブラリです。
Kivyは、MITライセンスのもと、オープンソースで開発がされているため、Qt等とくらべてライセンス的にも嬉しい仕様になってます。Qtの場合、悪しき†LGPLv3†のおかげで、会社でコードを書く際にかなり頭を悩ませていました。しかし、Kivyを使用すれば、商用としてのマルチプラットフォームGUIアプリ開発のコストを大幅に削減することができます。すごい!
おまけにレンダリングにはOpenGLを使用しているため、GPUによる恩恵を十分受けることができます。
ちなみに、Kivyで作成されたアプリは、以下デバイスに対応することができます(すごい)
- Linux
- Windows
- Mac OSX
- Android
- iOS
- Raspberry Pi
インストール方法
Windowsの方
※以下インストール手順中に「Permission denied」といったようなエラーがでた場合は、コマンドプロンプトを管理者権限で実行してください。
1. pip等のコマンドを最新に更新
python -m pip install --upgrade pip wheel setuptools
2. 依存ライブラリの導入
python -m pip install docutils pygments pypiwin32 kivy.deps.sdl2 kivy.deps.glew python -m pip install kivy.deps.gstreamer
MemoryError
が出た場合
pip install
のあとに-no-chache-dir
フラグを追加して実行しなおして下さい。
python -m pip install –no-cache-dir --upgrade pip wheel setuptools
Pythonのバージョンが3.5以上の場合
glew
の代わりにangle
をバックエンドとして使用するらしいので、以下コマンドで導入してください。
python -m pip install kivy.deps.angle
3. kivy本体のインストール
python -m pip install kivy
4. (必要な人)サンプルプログラムのインストール
python -m pip install kivy_examples
サンプルプログラムは、Pythonがインストールされているフォルダのshare
フォルダ以下のインストールされます。
実際に起動する際は、以下のように直接パスを指定して起動します。
python share\kivy-examples\demo\showcase\main.py
Macの方
※macOSX v10.7 Lion以降(32bitを除く)を使っている方は、開発に必要なpython3の開発環境と各種パッケージを同梱したKivy.app
というパッケージをkivy側が提供しています。公式サイトから入手してください。
1. Homebrew経由で必要なライブラリをインストール
brew install pkg-config sdl2 sdl2_image sdl2_ttf sdl2_mixer gstreamer
2. PyPI経由でCythonをインストール
pip install Cython==0.26.1
3. kivy本体のインストール
※【2018/5/1】現在、PyPIのリポジトリ経由でインストールすると、MIX_INIT_*
の定数使用箇所でビルドが落ちてしまう不具合があります。そのため、以下手順では、kivyのmaster(dev version)をインストールしています。詳細→https://github.com/kivy/kivy/pull/5459
pip install https://github.com/kivy/kivy/archive/master.zip
Linuxの方
LInuxの場合、ディストリビューションによってかなり手順が複雑・特殊なので、詳しくは公式ドキュメントを参照してください。
ウィンドウを表示してみる
kivyのアプリを構成する最小限のコードは以下のとおりです。
from kivy.app import App from kivy.uix.widget import Widget class MainWindow(Widget): pass class HelloWorldApp(App): def build(self): return MainWindow() if __name__ == '__main__': HelloWorldApp().run()
実行すると、以下のような黒いウインドウが出ます。これで、kivyアプリが作成されました。
公式チュートリアル
公式のチュートリアルとして、「Pong」と呼ばれるピンポンゲームを作るチュートリアルが公開されてます。
気になる方はやってみてください。
Pong Game Tutorial — Kivy 1.10.1.dev0 documentation