Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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化に課題があり