Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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%

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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)

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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)

Slide 47

Slide 47 text

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にする際に取り込む

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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