Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PythonのGUIについて

Jun okazaki
November 12, 2020

 PythonのGUIについて

みんなのPython勉強会#63
https://startpython.connpass.com/event/192677/ )
での「PythonでデスクトップGUIをつくる」のスライドです。

#stapy

Jun okazaki

November 12, 2020
Tweet

More Decks by Jun okazaki

Other Decks in Programming

Transcript

  1. アジェンダ ◼前半 • プログラムの実行方法について • GUIの利点 • PythonのGUIの一覧 • PythonのGUIについて

    • 個人的にお勧めするライブラリ • PythonでのGUIの位置づけ • PythonのGUIで作れるものの例 • ここまでのまとめ ◼後半 • PySimpleGUIの紹介 • PySimleGUI Stapyとの関連性 • PySimpleGUIについて • PySimpleGUIの基本的な書き方 • リストのリストでUIを作る • 公式のデモの紹介 • 最初に見るべきDemoプログラム • レイアウトの複雑な例 • まとめ 3
  2. ここから話す内容 ◼前半 • プログラムの実行方法について • GUIの利点 • PythonのGUIの一覧 • PythonのGUIについて

    • 個人的にお勧めするライブラリ • PythonでのGUIの位置づけ • PythonのGUIで作れるものの例 • ここまでのまとめ ◼後半 • PySimpleGUIの紹介 • PySimleGUI Stapyとの関連性 • PySimpleGUIについて • PySimpleGUIの基本的な書き方 • リストのリストでUIを作る • 公式のデモの紹介 • 最初に見るべきDemoプログラム • レイアウトの複雑な例 • まとめ 4
  3. プログラムの実行方法について • CLI • Command Line Interfaceの略 • すべてのやり取りを文字によって行う方式 •

    pythonだとclick( https://github.com/pallets/click )というライブラリがおすすめ 6
  4. PythonのGUIの一覧 • Tkinter • wxPython • PyQt5 ※QT系 • PySide2

    ※QT系 • pySimplelGUI • PyGTK • PyFLTK • Kivy • Eel • flexx • REMI • Electron + Python※2 • React Native + Transcrypt(altJS)※2 • Pygame • Toga • PyWebView • cefpython • PyGObject • Pyglet • PyGUI • libavg • Pyforms etc・・・ ※Qt系はそれぞれ開発元とライセンスが違います ※2はライブラリではなくて手法です 9
  5. ここから話す内容 ◼前半 • プログラムの実行方法について • GUIの利点 • PythonのGUIの一覧 • PythonのGUIについて

    • 個人的にお勧めするライブラリ • PythonでのGUIの位置づけ • PythonのGUIで作れるものの例 • PythonのGUIライブラリごとの 作り方の例 • ここまでのまとめ ◼後半 • PySimpleGUIの紹介 • PySimleGUI Stapyとの関連性 • PySimpleGUIについて • PySimpleGUIの基本的な書き方 • リストのリストでUIを作る • 公式のデモの紹介 • 最初に見るべきDemoプログラム • レイアウトの複雑な例 • まとめ 12
  6. Cyllista Game Engine • Cygamesがゲーム開発のために作ったインハウス(内製)のゲームエンジン • Pyside2でGUI作成、ツール関連はすべてPythonで書かれている • CEDEC2020 [Python

    による大規模ゲーム開発環境 〜Cyllista Game Engine 開発事例〜」で発表されている • https://tech.cygames.co.jp/archives/3442/ 17 Cyllista Game Engine のツール紹介(youtubeより)
  7. tkinter • コードを直接記述してwidgetをぺたぺた追加する • レイアウトが想像しづらい import tkinter from tkinter import

    messagebox #ボタンがクリックされたら実行 def button_click(): input_value = input_box.get() messagebox.showinfo("クリックイベント",input_value + "が入力されました。") #ウインドウの作成 root = tkinter.Tk() root.title("Python GUI") root.geometry("360x240") #入力欄の作成 input_box = tkinter.Entry(width=40) input_box.place(x=10, y=100) #ラベルの作成 input_label = tkinter.Label(text="ラベル") input_label.place(x=10, y=70) #ボタンの作成 button = tkinter.Button(text="実行ボタン",command=button_click) button.place(x=10, y=130) #ウインドウの描画 root.mainloop() コード 生成された画面 19
  8. Eel • htmlとcssとJavaScript • Chrom(ブラウザ)上でUI を動かしている • BootStrap,Vue.jsが使え るの見た目はよい •

    pythonでGUIを書いてい ない・・・ JavaSript HTML GUIの部分 Python 処理部分 WebSocetを使って やり取りする 23
  9. ここから話す内容 ◼前半 • プログラムの実行方法について • GUIの利点 • PythonのGUIの一覧 • PythonのGUIについて

    • 個人的にお勧めするライブラリ • PythonでのGUIの位置づけ • PythonのGUIで作れるものの例 • ここまでのまとめ ◼後半 • PySimpleGUIの紹介 • PySimleGUIとStapyとの関連性 • PySimpleGUIについて • PySimpleGUIの基本的な書き方 • リストのリストでUIを作る • 公式のデモの紹介 • 最初に見るべきDemoプログラム • レイアウトの複雑な例 • まとめ 26
  10. PySimpleGUIの紹介 • https://pysimplegui.readthedocs.io/en/latest/ • 2018年にできたライブラリ • TkinterのラッパーでPythonライクに書けるのが特徴 • 派生でwxPython、PyQtのラッパーライブラリも存在 •

    公式では元のライブラリで書くのに比べてコード量が1/2〜1/10になると説明 • Githubでは4,800スター • ライセンスはLGPL-3.0 • Windows,Mac,Linuxのクロスドメイン対応 27
  11. 対応しているOS 環境 サポート Python 3.4以上 OS Windows,Mac,Linux ハードウェア デスクトップ PC,

    ノートパソコ ン, Raspberry Pi, PyDroid3 を実 行しているアンドロイドデバイ ス オンライン repli.it、Trinket.com (どちらも ブラウザ上でtkinterを実行す る) GUI フレームワーク tkinter, pyside2, WxPython, Remi 31
  12. 公式のデモの紹介 • 公式には非常に多くのデモがあります • デモを見ればどう書くかがわかります。 • ライブラリと連携したデモもあります パッケージ 説明 Matplotlib

    グラフやプロットの多くの種類 OpenCV コンピュータビジョン (AIでよく使用) VLC ビデオ再生 pymunk 物理エンジン psutil システム環境の統計 prawn Reddit API json PySimpleGUI は、「ユーザー設定」を格納する特別なAPIをラップします。 weather お天気アプリを作るためにいくつかの天気APIと統合 mido MIDI 再生 beautiful soup ウェブスクレイピング (GitHub issueウォッチャーでの例) 41
  13. レイアウトの複雑な例 ① ② ③ ① ② ③ 47 • 右の列(以下のエレメントを行として構成)

    ①テキスト、入力、ファイルの読み込みボタン ②リスト ③ボタン、ボタン、ボタン、ボタン ④画像表示、画像表示