SlideShare a Scribd company logo
長野Python会 with NSEG
PythonのGUI@2018
2018/07/29 オカザキ
自己紹介
• オカザキ
• 職業:プログラマー
• http://twitter.com/dario_okazaki
• Kivyの公式マニュアルの翻訳を有志でしてました
(https://pyky.github.io/kivy-doc-ja/)
• PyconJP2017 トーク「Kivyによるアプリケーション開発のすすめ」
今日のアジェンダ
• なぜGUIは初心向けでないといわれるか?
• 個人的に今後PythonのGUIで注目しているもの
• 実演
• tkinter
• wxPython
• Eel
• Kivy
• Pythonが使えるゲームエンジンについて
• exe化について
• まとめ
GUIは今時必要か?
• Webアプリでよくないか?
• Webアプリだと困るもの
• ネット環境が悪いところ
• ネットが使えない場所
• wav等の音声データを遅延なく動かしたい
GUIは今時必要か?
• Webアプリでよくないか?
• Webアプリだと困るもの
• ネット環境が悪いところ
• ネットが使えない場所
• wav等の音声データを遅延なく動かしたい
Pythonの主要なGUI
• tkiner
• wxPython
• pySide2
• Kivy
• flexx
• cefpython
• Eel
• Toga
• FLTK
• PyGObject
• pyQt
• Pyglet
• PyGUi
• libavg
• Pyforms
etc・・・
問題
なぜGUIは初心向けでないといわれるか?
なぜGUIは初心向けでないといわれるか?(1/2)
• ローカルのPC環境に依存している
• インストールが難しい
• windowsだと同じOSなのにインストールで
きてたりできなかったり
• webは仮想化が進みインストールが簡単に
なった
• デフォルトだと見た目がいまいちなものが多い
• カスタマイズすると画像が必要とか面倒
なぜGUIは初心向けでないといわれるか?(2/2)
• Pythonの場合以下の問題もある
• どれが一番いい(簡単、将来性がある)のかよくわからない
• 定番がない:例:WebフレームワークならDjango
• GUIの実装方法が色々でてきた
• 昔ながらのOSのAPIを操作
• Web系
• 配布が難しい
• PyInstllerでexe化が可能だが問題多し
個人的にGUIで注目しているライブラリを
紹介します
個人的に今後PythonのGUIで注目しているもの
• Eel
• Kivy
• PySide2
• UnrealEngine(ゲームエンジン)
• godot engine(ゲームエンジン)
個人的にPythonのGUIで注目しているもの
• tkinter
• wxPython
• Eel
• Kivy
• PySide2
• UnrealEngine(ゲームエンジン)
• godot engine(ゲームエンジン)
コードで説明するライブリー
• 以下のライブラリについては簡単なコードをも
とに傾向を説明します。
• tkinter
• wxPython
• Eel
• Kivy
説明するコードについて
• 定期的にセンサーから取得した値をラベルで表示する
• USBで始めるハードウェアモジュール
• 温度/湿度/気圧を計測する 室内環境計測モジュール
• @nonNoise さんが作ったキット、Pythonでセンサーからの値を取得できる
• 技術書典4で購入
• PCにUSBで接続すると使用可能(ドライバーの手動インストール不要!)
tkinter
• 読み方:ティーキンター, ティーケーインター
• Pythonに標準で付属している
• インストールが簡単
• 配布も簡単
• 見た目がいまいち
• Python3.4以降から改善
• 機能面がいまいち
• キャンバスの使い方などで学習コストが意外に高い
tkinter(学習の参考になるもの)
• 12歳からはじめる ゼロからの Pythonゲームプロ
グラミング教室
• 書籍のタイトルにTkinterと記載がないがTinkerの
canvasを使用したサンプルコードが載っている
• TkDocs(https://tkdocs.com/index.html)
• 英語のサイトだが情報量多し
tkinter(実演)
• https://github.com/nonNoise/USB_StartUpModu
le/blob/master/AN-USB-
BME280/example/BME280_GUI.py
wxPython
• wxWidgets のPythonバインディング
• 元はC++
• 公式サイト: https://www.wxpython.org/
• Phoenixバージョンという3系対応のプロジェクトあり
• 3系対応時に仕様の変更が結構あったらしい
• PyPlに対応したのでpipでインストールできるようになった
• 使用実績は一時期多かった
• Dropbox、Google Drive、BitTorrent など
• wxGlade/ WxFormBuilderという、GUIツールキットがある
• WindowsOSだと見た目が・・
wxPython (学習の参考になるもの)
• wxPython GUIプログラミング
• 絶版で価格はプレミアがついている。洋書だと定
期的に出版されている
• 日本語だと体系だった情報があまりない状態
wxPython(実演)
• https://github.com/okajun35/AN-USB-
BME280/tree/master/wxPython
Eel
• https://github.com/ChrisKnott/Eel/tree/mast
er
• Eelはナマズの意味
• 2017年11月ごろにGitHubに登録
• Starの数は2106
• Electron をシンプルにしたもの。
• 一時期はやった、Python(flask) + Electronより
も簡単
Eel(仕組み)
• サーバー: Bottle(Python)
• フロントエンド:html+js (Chrom/Chromium上で動作)
• webhockで連携
• PORT:8080で連携
PC内
サーバーサイドフロントエンド
Eel(実演)
• https://github.com/okajun35/AN-USB-
BME280/tree/master/eel
Eel(使い方)
• インストールはpipでできる
pip install eel
Eel(使い方)
• 今回使用するアプリの構造
│ eel_label.py
│
│─PyMCP2221A ※センサーを動かすためのドライバー
│
│ ─web
eel_test.html
favicon.ico
Eel(使い方)
• python側での起動に関する設定
import eel
eel.init('web') #htmlが入っているフォルダのパス
eel.start('eel_test.html', size=(300, 200)) # 開始する
Eel(使い方)
• Python側の関数をjavascriptに公開する設定
@eel.expose # この関数をJavascriptに公開する
def read_BME280():
Eel(使い方)
• html側でPython側に関数を公開する
<script type="text/javascript" src="/eel.js"></script>
Eel(使い方)
• html側でPython側に関数を公開する
@eel.expose
def read_BME280():
eel.output_temperature(temp , hum ,preessure)
Eel(メリット)
• UI をhtml Javascript で作れる
• Javascript系の豊富なライブラリが使用できる
• グラフなどが簡単に作れる
• 業務でWeb系の仕事を作る人なら開発のハードルが低い
• JSは自分で書く必要がある
• 余談 JSを書きたくない人のためのライブラリ
(Pythonからjsに変換する)
• flexx (GUI)
• Brython
• pyinstller でexe化が可能
Eel(デメリット)
• Pythonだけで成立しない・・・
• html,css,javascript書きたくない・・・
Kivy
• https://github.com/kivy/kivy
• Kevyはキウイを食べる鳥の事
• Starの数は7863
• 最新は1.10.1(2018年7月リリース)
• android、iosを含めたクロスプラットフォーム
• Raspberry pyも動く
Kivy(仕組み)
• GraphicはOpenGL ESで描画
• 入力などはSDLで制御
• ※Windowsはver1.10でANGLE(OpenGl ESのDirectX実装)が選択で
きるようになった
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)
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
Kivy(実演)
• https://github.com/okajun35/AN-USB-
BME280/tree/master/Kivy
Kivy(構造)
• Pythonファイル(機能部分)とKVファイル(UI)の2つ
• Pythonファイルのみ
• KV言語が内部で記載されている
• Pythonのみで構成
Kivy(KV言語)
• KV Languageともいう
• UI用のメタ言語
• Widget(UI)を簡単に記述できる
• CSSとBootstrap(グリッド)の概念にちかい
• ※KVを使用しなくてもUIは作れるが使用したほうがコードが簡潔に
かける
Kivy
• どうしてマイナーなのか?
• 動作速度について
• 日本語の入力について
• Kv Languageについて
• マルチプラットフォームについて
• 闇が深い・・・
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
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
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)
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ファイル
• ライブラリの依存関係などを含めたりする
pyinstller(デメリット)
• 起動が重い
• spacファイルを作るのが手間がいる
Nuitka
• https://github.com/kayhayen/Nuitka
• http://nuitka.net/
• 参考
• https://githubja.com/kayhayen/nuitka
• https://qiita.com/junichi2/items/e7f2d899d1014167f8bc
• Cコンパイラでバイナリ化しているらしい
• 起動速度が早い
• 情報がまだまだ少ない
まとめ
• PythonのGUIはライブラリが多いがどれがいい
かを紹介した。
• Web系の開発の人はEelがお勧め
• 見た目がそこそこいいものをデフォルトでつ
くる場合はKivyがお勧め
• 配布時のexe化に課題があり

More Related Content

PDF
Webアプリを並行開発する際のマイグレーション戦略
PPTX
グラフ構造のデータモデルをPower BIで可視化してみた
PDF
新規事業「Bill One」による Google Cloud 活用術
PDF
Digitaltransformation Journey
PDF
ナラティブ・プロトタイピング
PDF
Cognitive Complexity でコードの複雑さを定量的に計測しよう
PDF
アップルの特許に見るUI特許のポイント
PPTX
Rails上でのpub/sub イベントハンドラの扱い
Webアプリを並行開発する際のマイグレーション戦略
グラフ構造のデータモデルをPower BIで可視化してみた
新規事業「Bill One」による Google Cloud 活用術
Digitaltransformation Journey
ナラティブ・プロトタイピング
Cognitive Complexity でコードの複雑さを定量的に計測しよう
アップルの特許に見るUI特許のポイント
Rails上でのpub/sub イベントハンドラの扱い

What's hot (20)

PDF
20221226_TITECH_lecture_ishizaki_public.pdf
PDF
それはYAGNIか? それとも思考停止か?
PDF
イミュータブルデータモデル(入門編)
PDF
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
PDF
ARMアーキテクチャにおけるセキュリティ機構の紹介
PDF
Dockerを支える技術
PDF
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
PPTX
WayOfNoTrouble.pptx
PDF
なぜ「マイクロサービス“化”」が必要なのか
PPTX
RLSを用いたマルチテナント実装 for Django
PPTX
DDDモデリングハンズオン - レガシーをぶっつぶせ。現場でDDD!2nd
PDF
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
PDF
Spring Data RESTを利用したAPIの設計と、作り直しまでの道のり
PDF
マイクロサービスにおけるテスト自動化 with Karate
PDF
高負荷に耐えうるWeb application serverの作り方
PPTX
オーバーエンジニアリングって何? #devsumi #devsumiA
PDF
"Kong Summit, Japan 2022" パートナーセッション:Kong on AWS で実現するスケーラブルな API 基盤の構築
PDF
旅館運営企業で実現した現場出身者の力を活かしたアジャイル開発
PDF
MongoDB Atlasの構成について 2019
PPTX
SQLアンチパターン メンター用資料
20221226_TITECH_lecture_ishizaki_public.pdf
それはYAGNIか? それとも思考停止か?
イミュータブルデータモデル(入門編)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
ARMアーキテクチャにおけるセキュリティ機構の紹介
Dockerを支える技術
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
WayOfNoTrouble.pptx
なぜ「マイクロサービス“化”」が必要なのか
RLSを用いたマルチテナント実装 for Django
DDDモデリングハンズオン - レガシーをぶっつぶせ。現場でDDD!2nd
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
Spring Data RESTを利用したAPIの設計と、作り直しまでの道のり
マイクロサービスにおけるテスト自動化 with Karate
高負荷に耐えうるWeb application serverの作り方
オーバーエンジニアリングって何? #devsumi #devsumiA
"Kong Summit, Japan 2022" パートナーセッション:Kong on AWS で実現するスケーラブルな API 基盤の構築
旅館運営企業で実現した現場出身者の力を活かしたアジャイル開発
MongoDB Atlasの構成について 2019
SQLアンチパターン メンター用資料
Ad

Similar to PythonのGUI_2018 with NSEG (20)

PPTX
「Kivyによるアプリケーション開発のすすめ」の勧め
PDF
はじめてのShiny
PDF
PyQtではじめるGUIプログラミング
PDF
PyconJP2017 Kivyによるアプリケーション開発のすすめ
PDF
Introduction Pycon2010
PDF
Python札幌 2012/06/17
PDF
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
PPTX
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PDF
Python & PyConJP 2014 Report
PPTX
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
ODP
Introduction of Python
PDF
使えるDjango1.4
PDF
RでつくるWebアプリ~rApache編~
PDF
Sphinx/reST
PDF
次世代言語 Python による PyPy を使った次世代の処理系開発
PDF
PyPy 紹介
PDF
Pythonと出会ったデザイナーの話 #PyLadiesTokyo
PDF
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing
PDF
Streamlitを用いた音響信号処理ダッシュボードの開発
PDF
Django で始める PyCharm 入門
「Kivyによるアプリケーション開発のすすめ」の勧め
はじめてのShiny
PyQtではじめるGUIプログラミング
PyconJP2017 Kivyによるアプリケーション開発のすすめ
Introduction Pycon2010
Python札幌 2012/06/17
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
Python & PyConJP 2014 Report
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
Introduction of Python
使えるDjango1.4
RでつくるWebアプリ~rApache編~
Sphinx/reST
次世代言語 Python による PyPy を使った次世代の処理系開発
PyPy 紹介
Pythonと出会ったデザイナーの話 #PyLadiesTokyo
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing
Streamlitを用いた音響信号処理ダッシュボードの開発
Django で始める PyCharm 入門
Ad

PythonのGUI_2018 with NSEG