PythonのGUI@2018

 PythonのGUI@2018

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

Fed4c6cfec7502b771e12f08f8d5ec6d?s=128

Jun okazaki

July 27, 2018
Tweet

Transcript

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

  2. 自己紹介 • オカザキ • 職業:プログラマー • http://twitter.com/dario_okazaki • Kivyの公式マニュアルの翻訳を有志でしてました (https://pyky.github.io/kivy-doc-ja/)

    • PyconJP2017 トーク「Kivyによるアプリケーション開発のすすめ」
  3. 今日のアジェンダ • なぜGUIは初心向けでないといわれるか? • 個人的に今後PythonのGUIで注目しているもの • 実演 • tkinter •

    wxPython • Eel • Kivy • Pythonが使えるゲームエンジンについて • exe化について • まとめ
  4. GUIは今時必要か? • Webアプリでよくないか? • Webアプリだと困るもの • ネット環境が悪いところ • ネットが使えない場所 •

    wav等の音声データを遅延なく動かしたい
  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%
  6. Pythonの主要なGUI • tkiner • wxPython • pySide2 • Kivy •

    flexx • cefpython • Eel • Toga • FLTK • PyGObject • pyQt • Pyglet • PyGUi • libavg • Pyforms etc・・・
  7. 問題 なぜGUIは初心向けでないといわれるか?

  8. なぜGUIは初心向けでないといわれるか?(1/2) • ローカルのPC環境に依存している • インストールが難しい • windowsだと同じOSなのにインストールで きてたりできなかったり • webは仮想化が進みインストールが簡単に

    なった • デフォルトだと見た目がいまいちなものが多い • カスタマイズすると画像が必要とか面倒
  9. なぜGUIは初心向けでないといわれるか?(2/2) • Pythonの場合以下の問題もある • どれが一番いい(簡単、将来性がある)のかよくわからない • 定番がない:例:WebフレームワークならDjango • GUIの実装方法が色々でてきた •

    昔ながらのOSのAPIを操作 • Web系 • 配布が難しい • PyInstllerでexe化が可能だが問題多し
  10. 個人的にGUIで注目している ライブラリを紹介します

  11. 個人的にPythonのGUIで注目しているもの • tkinter • wxPython • Eel • Kivy •

    PySide2 • UnrealEngine(ゲームエンジン) • godot engine(ゲームエンジン)
  12. コードで説明するライブリー • 以下のライブラリについては簡単なコードをも とに傾向を説明します。 • tkinter • wxPython • Eel

    • Kivy
  13. 説明するコードについて • 定期的にセンサーから取得した値をラベルで表示する • USBで始めるハードウェアモジュール • 温度/湿度/気圧を計測する 室内環境計測モジュール • @nonNoise

    さんが作ったキット、Pythonでセンサーからの値を取得できる • 技術書典4で購入 • PCにUSBで接続すると使用可能(ドライバーの手動インストール不要!)
  14. tkinter • 読み方:ティーキンター, ティーケーインター • Pythonに標準で付属している • インストールが簡単 • 配布も簡単

    • 見た目がいまいち • Python3.4以降から改善 • 機能面がいまいち • キャンバスの使い方などで学習コストが意外に高い
  15. tkinter(学習の参考になるもの) • 12歳からはじめる ゼロからの Pythonゲームプロ グラミング教室 • 書籍のタイトルにTkinterと記載がないがTinkerの canvasを使用したサンプルコードが載っている •

    TkDocs(https://tkdocs.com/index.html) • 英語のサイトだが情報量多し
  16. tkinter(実演) • https://github.com/nonNoise/USB_StartUpModu le/blob/master/AN-USB- BME280/example/BME280_GUI.py

  17. wxPython • wxWidgets のPythonバインディング • 元はC++ • 公式サイト: https://www.wxpython.org/ •

    Phoenixバージョンという3系対応のプロジェクトあり • 3系対応時に仕様の変更が結構あったらしい • PyPlに対応したのでpipでインストールできるようになった • 使用実績は一時期多かった • Dropbox、Google Drive、BitTorrent など • wxGlade/ WxFormBuilderという、GUIツールキットがある • WindowsOSだと見た目が・・
  18. wxPython (学習の参考になるもの) • wxPython GUIプログラミング • 絶版で価格はプレミアがついている。洋書だと定 期的に出版されている • 日本語だと体系だった情報があまりない状態

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

  20. Eel • https://github.com/ChrisKnott/Eel/tree/mast er • Eelはナマズの意味 • 2017年11月ごろにGitHubに登録 • Starの数は2106

    • Electron をシンプルにしたもの。 • 一時期はやった、Python(flask) + Electronより も簡単
  21. Eel(仕組み) • サーバー: Bottle(Python) • フロントエンド:html+js (Chrom/Chromium上で動作) • webhockで連携 •

    PORT:8080で連携 PC内 サーバーサイド フロントエンド
  22. Eel(実演) • https://github.com/okajun35/AN-USB- BME280/tree/master/eel

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

  24. Eel(使い方) • 今回使用するアプリの構造 │ eel_label.py │ │─PyMCP2221A ※センサーを動かすためのドライバー │ │

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

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

  27. Eel(使い方) • html側でPython側に関数を公開する <script type="text/javascript" src="/eel.js"></script>

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

  29. Eel(メリット) • UI をhtml Javascript で作れる • Javascript系の豊富なライブラリが使用できる • グラフなどが簡単に作れる

    • 業務でWeb系の仕事を作る人なら開発のハードルが低い • JSは自分で書く必要がある • 余談 JSを書きたくない人のためのライブラリ (Pythonからjsに変換する) • flexx (GUI) • Brython • pyinstller でexe化が可能
  30. Eel(デメリット) • Pythonだけで成立しない・・・ • html,css,javascript書きたくない・・・

  31. Kivy • https://github.com/kivy/kivy • Kevyはキウイを食べる鳥の事 • Starの数は7863 • 最新は1.10.1(2018年7月リリース) •

    Raspberry Pi ,android , iosを含めたクロスプ ラットフォーム
  32. Kivy(仕組み) • GraphicはOpenGL ESで描画 • 入力などはSDLで制御 • ※Windowsはver1.10でANGLE(OpenGl ESのDirectX実装)が選択で きるようになった

  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)
  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
  35. Kivy(実演) • https://github.com/okajun35/AN-USB- BME280/tree/master/Kivy

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

  37. Kivy(KV言語) • KV Languageともいう • UI用のメタ言語 • Widget(UI)を簡単に記述できる • CSSとBootstrap(グリッド)の概念にちかい

    • ※KVを使用しなくてもUIは作れるが使用したほうがコードが簡潔に かける
  38. Kivy • どうしてメジャーになれないか? • インストールについて • 動作速度について • 日本語の入力について •

    Kv Languageについて • マルチプラットフォームについて
  39. Kivy(インストールについて) • OSによってインストール方法が違う • 依存関係をユーザーが手動でインストールす る必要がある • pip install kivyだけだと上手く動かない・・・

    • 公式ドキュメントのインストールー (https://kivy.org/docs/installation/installation .html) を読んでください。
  40. Kivy(動作速度について) • 描画にOpenGLを使っているのでPCによっては 起動時間が遅い • Raspberry Piだと特に遅い

  41. Kivy(日本語入力について) • 日本語表記についてはフォントの指定が必要 • IME(変換候補)は1.10.1からOSによっては出るようになった • Webや書籍に書いてある日本語が出ない不具合はある程度解消された • IMEの部分はSDLに依存しているので、OSによってでない状況は不明 OS

    IMEの対応状況 詳細 windows △ IMEは開く MacOS 〇 IMEは開く、変換候補も複数開く Linux × 他の人の情報だとUbunutuでは開かないそ うです Android 〇 Nexus5、複数の機種で試したところ日本語 入力は問題なくできます iOS × IMEは開かないそうです。
  42. Kivy(Kv Languageについて) • サンプルコードが少ないので学習コストが高い • Kvファイルでエラーを吐くと原因がよくわからない場合がある • widgetへの参照がデフォルトでは弱い参照 • デザインをKv、ロジックをPythonで行うようになっ

    ているが、その部分がきれいに分離できていない
  43. Kivy(マルチプラットフォームについて) • iOSは開発に力が入っていないので最新の状況 にあまり追随できていないように感じる。 • まだ公式だと2系しかサポートしていない • AndoridはPython3系対応が不完全 • Kivy

    Lancher は3系対応中 (https://github.com/kivy/kivy-launcher) • apkを作成するのは環境設定などが大変 • Numpyなど3dライブラリを入れる場合はBootstrapという 手法があるが変換が大変
  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
  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
  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)
  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にする際に取り込む
  48. pyinstller(デメリット) • 起動が重い • ファイルの容量が大きい • spacファイルを作るのに手間がかかる

  49. Nuitka • https://github.com/kayhayen/Nuitka • http://nuitka.net/ • 参考 • https://githubja.com/kayhayen/nuitka •

    https://qiita.com/junichi2/items/e7f2d899d1014167f8bc • Cコンパイラでバイナリ化しているらしい • 起動速度が早い • exe化した場合の容量が小さい • 情報がまだまだ少ない • ライブラリを多く含むもののexe化が難しい
  50. まとめ • PythonのGUIはライブラリが多いがどれがいい かを紹介した。 • Web系の開発の人はEelがお勧め • 見た目がそこそこいいものをデフォルトでつ くる場合はKivyがお勧め •

    配布時のexe化に課題があり