Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PythonのGUI@2018

 PythonのGUI@2018

2018年7月28日開催の「長野Python会 with NSEG」の資料です。

Jun okazaki

July 27, 2018
Tweet

More Decks by Jun okazaki

Other Decks in Programming

Transcript

  1. 長野Python会 with NSEG
    PythonのGUI@2018
    2018/07/29 オカザキ

    View Slide

  2. 自己紹介
    • オカザキ
    • 職業:プログラマー
    • http://twitter.com/dario_okazaki
    • Kivyの公式マニュアルの翻訳を有志でしてました
    (https://pyky.github.io/kivy-doc-ja/)
    • PyconJP2017 トーク「Kivyによるアプリケーション開発のすすめ」

    View Slide

  3. 今日のアジェンダ
    • なぜGUIは初心向けでないといわれるか?
    • 個人的に今後PythonのGUIで注目しているもの
    • 実演
    • tkinter
    • wxPython
    • Eel
    • Kivy
    • Pythonが使えるゲームエンジンについて
    • exe化について
    • まとめ

    View Slide

  4. GUIは今時必要か?
    • Webアプリでよくないか?
    • Webアプリだと困るもの
    • ネット環境が悪いところ
    • ネットが使えない場所
    • wav等の音声データを遅延なく動かしたい

    View Slide

  5. PythonのGUIのシェアについて
    • https://www.jetbrains.com/research/devecosystem-
    2018/python/
    • JetBrainsの2018の資料
    • Pythonで何のフレームワークを使用していますかの質
    問の答え
    • GUIは以下
    • PyQT/PyGTK/wxPython:11%
    • TkInter : 7%
    • Kivy :2%
    • 参考:NumPy / matplotlib / SciPy / Pandas and similar : 47%
    Django:39%、Flask:39%

    View Slide

  6. Pythonの主要なGUI
    • tkiner
    • wxPython
    • pySide2
    • Kivy
    • flexx
    • cefpython
    • Eel
    • Toga
    • FLTK
    • PyGObject
    • pyQt
    • Pyglet
    • PyGUi
    • libavg
    • Pyforms
    etc・・・

    View Slide

  7. 問題
    なぜGUIは初心向けでないといわれるか?

    View Slide

  8. なぜGUIは初心向けでないといわれるか?(1/2)
    • ローカルのPC環境に依存している
    • インストールが難しい
    • windowsだと同じOSなのにインストールで
    きてたりできなかったり
    • webは仮想化が進みインストールが簡単に
    なった
    • デフォルトだと見た目がいまいちなものが多い
    • カスタマイズすると画像が必要とか面倒

    View Slide

  9. なぜGUIは初心向けでないといわれるか?(2/2)
    • Pythonの場合以下の問題もある
    • どれが一番いい(簡単、将来性がある)のかよくわからない
    • 定番がない:例:WebフレームワークならDjango
    • GUIの実装方法が色々でてきた
    • 昔ながらのOSのAPIを操作
    • Web系
    • 配布が難しい
    • PyInstllerでexe化が可能だが問題多し

    View Slide

  10. 個人的にGUIで注目している
    ライブラリを紹介します

    View Slide

  11. 個人的にPythonのGUIで注目しているもの
    • tkinter
    • wxPython
    • Eel
    • Kivy
    • PySide2
    • UnrealEngine(ゲームエンジン)
    • godot engine(ゲームエンジン)

    View Slide

  12. コードで説明するライブリー
    • 以下のライブラリについては簡単なコードをも
    とに傾向を説明します。
    • tkinter
    • wxPython
    • Eel
    • Kivy

    View Slide

  13. 説明するコードについて
    • 定期的にセンサーから取得した値をラベルで表示する
    • USBで始めるハードウェアモジュール
    • 温度/湿度/気圧を計測する 室内環境計測モジュール
    • @nonNoise さんが作ったキット、Pythonでセンサーからの値を取得できる
    • 技術書典4で購入
    • PCにUSBで接続すると使用可能(ドライバーの手動インストール不要!)

    View Slide

  14. tkinter
    • 読み方:ティーキンター, ティーケーインター
    • Pythonに標準で付属している
    • インストールが簡単
    • 配布も簡単
    • 見た目がいまいち
    • Python3.4以降から改善
    • 機能面がいまいち
    • キャンバスの使い方などで学習コストが意外に高い

    View Slide

  15. tkinter(学習の参考になるもの)
    • 12歳からはじめる ゼロからの Pythonゲームプロ
    グラミング教室
    • 書籍のタイトルにTkinterと記載がないがTinkerの
    canvasを使用したサンプルコードが載っている
    • TkDocs(https://tkdocs.com/index.html)
    • 英語のサイトだが情報量多し

    View Slide

  16. tkinter(実演)
    • https://github.com/nonNoise/USB_StartUpModu
    le/blob/master/AN-USB-
    BME280/example/BME280_GUI.py

    View Slide

  17. wxPython
    • wxWidgets のPythonバインディング
    • 元はC++
    • 公式サイト: https://www.wxpython.org/
    • Phoenixバージョンという3系対応のプロジェクトあり
    • 3系対応時に仕様の変更が結構あったらしい
    • PyPlに対応したのでpipでインストールできるようになった
    • 使用実績は一時期多かった
    • Dropbox、Google Drive、BitTorrent など
    • wxGlade/ WxFormBuilderという、GUIツールキットがある
    • WindowsOSだと見た目が・・

    View Slide

  18. wxPython (学習の参考になるもの)
    • wxPython GUIプログラミング
    • 絶版で価格はプレミアがついている。洋書だと定
    期的に出版されている
    • 日本語だと体系だった情報があまりない状態

    View Slide

  19. wxPython(実演)
    • https://github.com/okajun35/AN-USB-
    BME280/tree/master/wxPython

    View Slide

  20. Eel
    • https://github.com/ChrisKnott/Eel/tree/mast
    er
    • Eelはナマズの意味
    • 2017年11月ごろにGitHubに登録
    • Starの数は2106
    • Electron をシンプルにしたもの。
    • 一時期はやった、Python(flask) + Electronより
    も簡単

    View Slide

  21. Eel(仕組み)
    • サーバー: Bottle(Python)
    • フロントエンド:html+js (Chrom/Chromium上で動作)
    • webhockで連携
    • PORT:8080で連携
    PC内
    サーバーサイド
    フロントエンド

    View Slide

  22. Eel(実演)
    • https://github.com/okajun35/AN-USB-
    BME280/tree/master/eel

    View Slide

  23. Eel(使い方)
    • インストールはpipでできる
    pip install eel

    View Slide

  24. Eel(使い方)
    • 今回使用するアプリの構造
    │ eel_label.py

    │─PyMCP2221A ※センサーを動かすためのドライバー

    │ ─web
    eel_test.html
    favicon.ico

    View Slide

  25. Eel(使い方)
    • Python側での起動に関する設定
    import eel
    eel.init('web') #htmlが入っているフォルダのパス
    eel.start('eel_test.html', size=(300, 200)) # 開始する

    View Slide

  26. Eel(使い方)
    • Python側の関数をjavascriptに公開する設定
    @eel.expose # この関数をJavascriptに公開する
    def read_BME280():

    View Slide

  27. Eel(使い方)
    • html側でPython側に関数を公開する

    View Slide

  28. Eel(使い方)
    • html側でPython側に関数を公開する
    @eel.expose
    def read_BME280():
    eel.output_temperature(temp , hum ,preessure)

    View Slide

  29. Eel(メリット)
    • UI をhtml Javascript で作れる
    • Javascript系の豊富なライブラリが使用できる
    • グラフなどが簡単に作れる
    • 業務でWeb系の仕事を作る人なら開発のハードルが低い
    • JSは自分で書く必要がある
    • 余談 JSを書きたくない人のためのライブラリ
    (Pythonからjsに変換する)
    • flexx (GUI)
    • Brython
    • pyinstller でexe化が可能

    View Slide

  30. Eel(デメリット)
    • Pythonだけで成立しない・・・
    • html,css,javascript書きたくない・・・

    View Slide

  31. Kivy
    • https://github.com/kivy/kivy
    • Kevyはキウイを食べる鳥の事
    • Starの数は7863
    • 最新は1.10.1(2018年7月リリース)
    • Raspberry Pi ,android , iosを含めたクロスプ
    ラットフォーム

    View Slide

  32. Kivy(仕組み)
    • GraphicはOpenGL ESで描画
    • 入力などはSDLで制御
    • ※Windowsはver1.10でANGLE(OpenGl ESのDirectX実装)が選択で
    きるようになった

    View Slide

  33. Kivy(学習の参考になるもの)
    • 日本語の本は3冊出版されている
    • 最近出た本 Kivyプログラミング ―Pythonで作る
    マルチタッチアプリ― (実践Pythonライブラリー
    • https://www.amazon.co.jp/dp/4254128967/
    • 国内で出たKivy関係の本では最もよい
    • 公式ドキュメントの翻訳(https://github.com/pyKy/kivy-
    doc-ja)
    • 最新に追従していないので参考にする際は英語の公式ドキュ
    メントと読み比べてください
    • Python Kivyの使い方① ~Kv Languageの基本~
    (https://qiita.com/dario_okazaki/items/7892b24fcfa787faface)

    View Slide

  34. Kivy(実績)
    • 仕事で使っている案件が数例あり
    • キュウリの仕分け3号機
    • TensorFlowでキュウリの仕分けを自動化する
    • 学習の際のUIにKivyとRaspberryPyを使用
    • https://news.mynavi.jp/article/20180606-642208/
    • http://workpiles.com/2017/05/ccb9-proto3-introduction/
    • https://www.youtube.com/watch?v=XOjwWlSpLME

    View Slide

  35. Kivy(実演)
    • https://github.com/okajun35/AN-USB-
    BME280/tree/master/Kivy

    View Slide

  36. Kivy(構造)
    • Pythonファイル(機能部分)とKVファイル(UI)の2つ
    • Pythonファイルのみ
    • KV言語が内部で記載されている
    • Pythonのみで構成

    View Slide

  37. Kivy(KV言語)
    • KV Languageともいう
    • UI用のメタ言語
    • Widget(UI)を簡単に記述できる
    • CSSとBootstrap(グリッド)の概念にちかい
    • ※KVを使用しなくてもUIは作れるが使用したほうがコードが簡潔に
    かける

    View Slide

  38. Kivy
    • どうしてメジャーになれないか?
    • インストールについて
    • 動作速度について
    • 日本語の入力について
    • Kv Languageについて
    • マルチプラットフォームについて

    View Slide

  39. Kivy(インストールについて)
    • OSによってインストール方法が違う
    • 依存関係をユーザーが手動でインストールす
    る必要がある
    • pip install kivyだけだと上手く動かない・・・
    • 公式ドキュメントのインストールー
    (https://kivy.org/docs/installation/installation
    .html) を読んでください。

    View Slide

  40. Kivy(動作速度について)
    • 描画にOpenGLを使っているのでPCによっては
    起動時間が遅い
    • Raspberry Piだと特に遅い

    View Slide

  41. Kivy(日本語入力について)
    • 日本語表記についてはフォントの指定が必要
    • IME(変換候補)は1.10.1からOSによっては出るようになった
    • Webや書籍に書いてある日本語が出ない不具合はある程度解消された
    • IMEの部分はSDLに依存しているので、OSによってでない状況は不明
    OS IMEの対応状況 詳細
    windows △ IMEは開く
    MacOS 〇 IMEは開く、変換候補も複数開く
    Linux × 他の人の情報だとUbunutuでは開かないそ
    うです
    Android 〇 Nexus5、複数の機種で試したところ日本語
    入力は問題なくできます
    iOS × IMEは開かないそうです。

    View Slide

  42. Kivy(Kv Languageについて)
    • サンプルコードが少ないので学習コストが高い
    • Kvファイルでエラーを吐くと原因がよくわからない場合がある
    • widgetへの参照がデフォルトでは弱い参照
    • デザインをKv、ロジックをPythonで行うようになっ
    ているが、その部分がきれいに分離できていない

    View Slide

  43. Kivy(マルチプラットフォームについて)
    • iOSは開発に力が入っていないので最新の状況
    にあまり追随できていないように感じる。
    • まだ公式だと2系しかサポートしていない
    • AndoridはPython3系対応が不完全
    • Kivy Lancher は3系対応中
    (https://github.com/kivy/kivy-launcher)
    • apkを作成するのは環境設定などが大変
    • Numpyなど3dライブラリを入れる場合はBootstrapという
    手法があるが変換が大変

    View Slide

  44. PySide2
    • Qt for Pythonともいう
    • ライセンスフリーなQT系のライブラリ
    • 開発は盛んにおこなわれている
    • https://wiki.qt.io/Qt_for_Python
    • http://blog.qt.io/blog/2018/05/04/hello-qt-for-python/
    • https://www.qoosky.io/techs/3eccbf937d
    • https://dftalk.jp/?p=20768

    View Slide

  45. UnrealEngine4
    • Epic Gamesより開発されたゲームエンジン
    • 「ドラゴンクエストXI 」(ゲーム)や「ローグ・ワン/スター・
    ウォーズ・ストーリー」(映画)に使用
    • ゲーム会社がPythonで動かせるものを開発
    • https://github.com/20tab/UnrealEnginePython
    • EuroPython 2017 でもトークがある
    • AAA Games with Unreal Engine 4 and Python
    (https://www.youtube.com/watch?v=_38csFR5Hrw)
    • 公式でもPythonで動かせるように開発が進んでいる
    Setting up Collisions with Static Meshes in Blueprints and Python

    View Slide

  46. Godot Engine
    • MITライセンスなOSSのゲームエンジン
    Pythonで動かそうと開発している人がいる
    • https://github.com/touilleMan/godot-python
    • EuroPython 2017 でもトークがある
    • Bringing Python to Godot game
    engine(https://www.youtube.com/watch?v=SK
    0BtxHROdg)

    View Slide

  47. pyinstller
    • https://github.com/pyinstaller/pyinstaller
    • 使い方の参考
    • https://pythonhosted.org/PyInstaller/usage.html
    • https://www.pyinstaller.org/https://www.lisz
    • works.com/entry/pyinstall
    • オプション
    • --onefile :1ファイルにまとめる場合
    • -noconsole :起動時にログ出力などのコンソール画面を出さないようする場合
    • specファイル
    • ライブラリの依存関係などを記述してexeにする際に取り込む

    View Slide

  48. pyinstller(デメリット)
    • 起動が重い
    • ファイルの容量が大きい
    • spacファイルを作るのに手間がかかる

    View Slide

  49. Nuitka
    • https://github.com/kayhayen/Nuitka
    • http://nuitka.net/
    • 参考
    • https://githubja.com/kayhayen/nuitka
    • https://qiita.com/junichi2/items/e7f2d899d1014167f8bc
    • Cコンパイラでバイナリ化しているらしい
    • 起動速度が早い
    • exe化した場合の容量が小さい
    • 情報がまだまだ少ない
    • ライブラリを多く含むもののexe化が難しい

    View Slide

  50. まとめ
    • PythonのGUIはライブラリが多いがどれがいい
    かを紹介した。
    • Web系の開発の人はEelがお勧め
    • 見た目がそこそこいいものをデフォルトでつ
    くる場合はKivyがお勧め
    • 配布時のexe化に課題があり

    View Slide