Slide 1

Slide 1 text

Pythonのスクリプトに GUIをつける方法 2020年3月11日 オカザキ みんなのPython勉強会#55 1

Slide 2

Slide 2 text

自己紹介 • オカザキ(@dario_okazaki) • 所属:(株)スカラコミュニケーション ズ • 職業:サーバーサイドエンジニア • 趣味でPythonのGUIライブラリを調べてい ます 2

Slide 3

Slide 3 text

今日話す内容 • Pythonでデスクトップアプリ(GUI)を使う上での お勧めのライブラリを紹介します • ライブラリの詳しい使い方は説明しません 3

Slide 4

Slide 4 text

今日の話の対象者 • Stapyということでプログラム初心者を対象としています 4

Slide 5

Slide 5 text

今日紹介するライブラリ •Eel •PySimpleGUI •PyInstaller 5

Slide 6

Slide 6 text

よく見る質問 • Q: Pythoでデスクトップアプリを使う場合は どれがいいの? 6

Slide 7

Slide 7 text

こたえ • 目的によってケースバイケースなので 答え(ライブラリー)はちがいます。 7

Slide 8

Slide 8 text

目的が決まっているなら答えは簡単 8

Slide 9

Slide 9 text

回答例(目的がはっきりしている) • ゲームを作りたい • Pygames(https://www.pygame.org/news) • Pyxel (https://github.com/kitao/pyxel/blob/master/README.ja.m d) • CGソフト、3D系のゲームエンジンで使用したい場合 • Pyside2(Qt for Python)(https://wiki.qt.io/Qt_for_Python) 9

Slide 10

Slide 10 text

回答(とりあえずどんなものか試してみたい人) • 初心向けでよさそうなものなら以下の2つ • Eel •PySimpleGUI ※良さそう=汎用的に使用できそう 10

Slide 11

Slide 11 text

選んだ経緯(1/2) • 時代はWebアプリが全盛 • Pythonの国内の業務は、Web、データ解析、機械学習が大半 11

Slide 12

Slide 12 text

選んだ経緯(2/2) • Webの知識が身につくもの • インストールが簡単なもの • pipのインストールのみで済む • 依存関係のソフト/ドライバーのインストールが簡単なもの • つくりが簡単なもの 12

Slide 13

Slide 13 text

Eelについて • Eelはウナギの事 • https://github.com/samuelhwilliams/Eel • 2017年末にできたライブラリー • 3,300Star • Windows,Mac,Linuxのクロスドメイン対応 13

Slide 14

Slide 14 text

Demo • https://www.sakaki333.co m/blog/view/79 • Bootstrap と Vue.jsを組み 合わせている 14

Slide 15

Slide 15 text

構成 • ローカルで動くwebサーバと同じ Eelで作ってみる WHOISアプリと スライド JavaSript HTML GUIの部分 Python 処理部分 WebSocetを使って やり取りする 15

Slide 16

Slide 16 text

Eelの詳しい説明 Eelで作ってみる WHOISアプリと スライド Eelで作ってみる WHOISアプリと スライド @attakai(kAZUYA tAKEI) https://speakerdeck.com/attakei/eeldezuo-tutemiru-whoisapurito-suraido 16

Slide 17

Slide 17 text

選んだ経緯 • Webの知識が身につくもの • html,CSS,JavaScriptの知識が身につく • テキストが豊富(webだから) • インストールが簡単なもの • Pip install eel と Googole Chromeのインストールでできる • しくみが簡単 • PythonとJavaScriptの連携で可能 17

Slide 18

Slide 18 text

Eelが向いていない人 • Webの勉強は別にしたくない • Javascript,cssは奥が深い • PythonだけでGUIを書きたい 18

Slide 19

Slide 19 text

PySimpleGUIの紹介 • https://pysimplegui.readthedocs.io/en/latest/ • 2018年にできたライブラリー • TkinterのラッパーでPythonライクに書けるのが特徴 • 派生でwxPython、PyQtのラッパーライブラリーも存在 • 公式では元のライブラリで書くのに比べてコード量が1/2~1/10になると説明 • Githubでは3,000スター • ライセンスはLGPL-3.0 • Windows,Mac,Linuxのクロスドメイン対応 19

Slide 20

Slide 20 text

デモの(画像処理の入力、確認) • 「アスキーアートを自動生成する - Pythonでいろいろやってみる」https://tat- pytone.hatenablog.com/entry/2020/02/26/202205 のコードをお借りしてUIをつけてみまし た。 • 画像ファイルを選択して、スライダー部分で文字の大きさを変更する。 • GUIのコード部分は80行程度 • コード: https://github.com/okajun35/for_pycon_shizu/tree/master/example/08_asci_art 20

Slide 21

Slide 21 text

PySimpleGUIの詳しい説明 ⚫Tkinterを使うのであればPySimpleGUIを使ってみたらという話 (https://qiita.com/dario_okazaki/items/656de21cab5c81cabe59) ⚫Pythonでデスクトップアプリを簡単に作る方法 (https://speakerdeck.com/okajun35/pythondedesukutotupuapuriwojia n-dan-nizuo-rufang-fa) で作ってみる WHOISアプリと スライド 21

Slide 22

Slide 22 text

選んだ経緯 • Pythonのみでかける • インストールが簡単なもの • pip install pysimpleguiのみ • tkinterはPythonのインストール時に標準で入ってくる • 仕組みが簡単 • レイアウトの細かいことはPySimpleGUI内で自動でしてくれる 22

Slide 23

Slide 23 text

PySimpleGUIが向いていない人 • レイアウトに凝りたい人 • Macユーザ • Macだとtkinterを使用するうえで不具合がある • IME(変換中の日本語入力)が表示されないなど • PySimpleGUIWX(wxPythonのラッパー)ならMacでも正しく動作するが wxPythonのインストールが必要 23

Slide 24

Slide 24 text

Pyinstaller • 配布用にexe,appにパッケージ化するライブラリ • https://www.pyinstaller.org/ • 配布用に使用する • 設定が難しい場合がある • 実行動作が遅くなる • 初心者は使用しない方がよい • 配布するなら、pip freezeしたものをrequirements.txtで配布したほ うがよい ※ユーザーはPythonのインストール+ライブラリーのインストールで使用してもらう 24

Slide 25

Slide 25 text

よく見る質問2 • デスクトップアプリで作った方がいいアプリは なに? 25

Slide 26

Slide 26 text

デスクトップアプリを作るのに向いてい るもの • 不特定多数の人に配布しないアプリ • 個人で作ったちょっとしたツール • 社内ツール • webアプリにする前にアルゴリズムの効果を検討したいもの 26

Slide 27

Slide 27 text

まとめ • デスクトップアプリはPythonではメジャーではない • 使用用途によっては簡単にUIが作れる • 汎用的なライブラリなら以下の2つを使って作る • Eel • PySimpleGUI • バイナリ化はPyInstallerを使って作れるが初心者は使わない方 がよい 27

Slide 28

Slide 28 text

おまけ:スマホアプリを作るなら • 個人でのみ使いたい場合 • Andoriod ・・・PyDroid3 • iOS ・・・Pythonista3 • Google PlayやApp Storeに配布したい場合 • UIは、Java,Kotlin,Swift,ReactNativeなどを使用する • Pythonを使用する場合はAPIサーバを立ててリクエストで入出力する • Kivy,PyBeeなどのPythonライブラリは初心者は使用しない方が無難 28