pythonでGUIアプリ作成 ~Kivyのインストール~

やりたいこと

pythonGUIアプリを作る

調べたこと

pythonでは、GUIアプリを作るのに以下の4つの環境が候補としてあげられる。

この中で、近年人気なのがKivyらしい techplay.jp

Kivyのインストール

私の開発環境は以下のとおりである - WSLのubuntu18.04LTS - python3.6

できればこの環境を使いまわしたいので、インストールするのはubuntuに決定。

どうやら、ubuntuに入れる方法はややこしいらしい。

pyky.github.io

これを参考にインストールをしていく。

躓いたところ

stable buildsだとエラーが出る

[CRITICAL] [Window      ] Unable to find any valuable Window provider. Please enable debug logging (e.g. add -d if running from the command line, or change the log level in the config) and re-run your app to identify potential causes
egl_rpi - ImportError: cannot import name 'bcm'
  File "/usr/lib/python3/dist-packages/kivy/core/__init__.py", line 63, in core_select_lib
    fromlist=[modulename], level=0)
  File "/usr/lib/python3/dist-packages/kivy/core/window/window_egl_rpi.py", line 12, in <module>
    from kivy.lib.vidcore_lite import bcm, egl

sdl2 - ImportError: libSDL2_image-2.0.so.0: cannot open shared object file: No such file or directory
  File "/usr/lib/python3/dist-packages/kivy/core/__init__.py", line 63, in core_select_lib
    fromlist=[modulename], level=0)
  File "/usr/lib/python3/dist-packages/kivy/core/window/window_sdl2.py", line 27, in <module>
    from kivy.core.window._window_sdl2 import _WindowSDL2Storage

x11 - ImportError: No module named 'kivy.core.window.window_x11'
  File "/usr/lib/python3/dist-packages/kivy/core/__init__.py", line 63, in core_select_lib
    fromlist=[modulename], level=0)

[CRITICAL] [App         ] Unable to get a Window, abort.

これは、ubuntuインストーラーにbcmが含まれないからだそう

github.com

解決策

nightly buildsを使う

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

$ sudo apt-get install python3-kivy

これでinstallが終了。

テストコードの実行

コード

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()

躓いたところ

openGLが2.0以下なのでErrorになる

解決方法

いろいろ試したが、xwindowが選ぶopenGLが1.4になってたのが問題だった。

unset LIBGL_ALWAYS_INDIRECT

と、VcXsrvの起動時に Extra settingsでNative openglをチェックアウトする

すると、openGLが変更され起動する。

結果

f:id:techsho:20200927174524p:plain

購入検討中の本