がべーじこれくしょん

技術系とかいろいろ

Kivy + PythonでイケてるGUIアプリを作ってみる

TL;DR

PyQtで(ライセンス的にもSAN値的にも)大幅に消耗したのでkivyを使ってみたらQOD(Quality of Developing)が向上した話

kivyって何よ

kivy.org

kivyは、Pythonマルチプラットフォーム対応のGUIアプリケーションを作るためのライブラリです。

Kivyは、MITライセンスのもと、オープンソースで開発がされているため、Qt等とくらべてライセンス的にも嬉しい仕様になってます。Qtの場合、悪しき†LGPLv3†のおかげで、会社でコードを書く際にかなり頭を悩ませていました。しかし、Kivyを使用すれば、商用としてのマルチプラットフォームGUIアプリ開発のコストを大幅に削減することができます。すごい!

おまけにレンダリングにはOpenGLを使用しているため、GPUによる恩恵を十分受けることができます。

ちなみに、Kivyで作成されたアプリは、以下デバイスに対応することができます(すごい)

インストール方法

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アプリが作成されました。

f:id:musaprg:20180501213602p:plain

公式チュートリアル

公式のチュートリアルとして、「Pong」と呼ばれるピンポンゲームを作るチュートリアルが公開されてます。

気になる方はやってみてください。

Pong Game Tutorial — Kivy 1.10.1.dev0 documentation

参考文献