PySimpleGUIを試してみました!
PySimpleGUIはプログラムを少ない行数で書けるGUIとして、Pythonで人気のGUIの1つとなっています。
PySimpleGUIを使って、簡単なGUIアプリを作ってみました。
今回は、初心者に向けて、基礎の基礎をメインにするため、
- PySimpleGUIの雰囲気
- 基礎的なPySimpleGUIの実装方法
をつかんでいただけたらと思います。
PySimpleGUIの特徴
見やすくシンプルなプログラム
PySimpleGUIでは、プログラムの1行1行が、GUIの1行1行に対応して書けるため、見やすいプログラムとなっています。
<公式ドキュメントから抜粋>
実際に見たほうが早いと思うので、下記、サンプルプログラムの画面レイアウト部分と実行結果です。
layout = [ [sg.Text('Some text on Row 1')], [sg.Text('Enter something on Row 2'), sg.InputText()], [sg.OK(), sg.Cancel()]]
実装がしやすい
プログラムの見やすさだけでなく、次の点でも、PySimpleGUIは実装のしやすいライブラリであると思います。
■しっかりしてる公式ドキュメント
PySimpleGUIには「クックブック」と呼ばれる使い方が書かれている公式ドキュメントがあります。
英語ですが、ここまで細かく丁寧に書かれているドキュメントは少ないと思います。
プログラムを書く際の基本的な疑問については、クックブックを見れば解決できると思います。
■デモプログラムが豊富
ドキュメントだけではなく、デモプログラムも豊富にあります。
既存のプログラムをGUI化したいとき、他のライブラリとの連携が必要になるかと思います。
PySimpleGUIには、MatplotlibやOpenCVなどとの連携のサンプルプログラムもあります。
ライセンス
PySimpleGUIのライセンスは、GNU Lesser General Public License v3.0(LGPL 3.0)です。(参考)
【Python】GUIアプリを作ってみる【PySimpleGUI編】
開発環境
- OS Windows 10
- Pythonバージョン 3.7.1
- エディタ VS Code
- ライブラリ PySimpleGUI 4.24.0、Pillow 5.4.1(サンプルプログラム2で使用します)
準備 PySimpleGUIのインストール
pip install PySimpleGUI
⇒「Successfully installed~」がでればOK
サンプルプログラム1 Hello World
まずは、PySimpleGUIを使って、「Hello World」を表示させましょう。
ソースコード
import PySimpleGUI as sg # ウィンドウのレイアウト layout = [ [sg.Text('Hello')], [sg.Text('World')] ] # ウィンドウオブジェクトの作成 window = sg.Window('PySimpleGUI Sample', layout, size=(300, 150)) # イベントのループ while True: # イベントの読み込み event, values = window.read() # ウィンドウの×ボタンが押されれば終了 if event == sg.WIN_CLOSED: break # ウィンドウ終了処理 window.close()
全体の流れとしては、下記の通りとなります。
- ウィンドウのレイアウトを2次元配列で設定 4~5行目
- ウィンドウオブジェクトの生成 8行目
- イベントループ 11~16行目
- 終了処理 19行目
実行結果
無事に「Hello World」が表示されました!
サンプルプログラム2 簡単な画像変換・表示アプリ
ソースコード
import PySimpleGUI as sg from PIL import Image, ImageTk # ファイルブラウザを使用したファイル入力 file_input_col = [sg.Text('ファイル'), sg.InputText(key='INPUT_FILE', enable_events=True, size=(45,1)), sg.FileBrowse('参照', file_types=(('jpegファイル', '*.jpg'), ('png', '*.png')))] # 画像のモード指定 image_mode_col = [sg.Text('画像モード'), sg.Listbox(values=('Normal', 'LA', 'HSV', 'P'), size=(30, 3), key='IMAGE_MODE', enable_events=True)] # 画像を表示するElement image_element = [sg.Image(filename='')] # ウィンドウのレイアウト layout = [ file_input_col, image_mode_col, image_element ] # 画像データの読み込みとサイズ変更 # デフォルトではGIF、PGM/PPM画像しか対応していないため、 # PILを使用して読み込む def get_image_data(input_filename, image_mode): image = Image.open(input_filename) if len(image_mode) != 0: if image_mode[0] != 'Normal': image_convert = image.convert(image_mode[0]) image = image_convert image.thumbnail((400,400)) return ImageTk.PhotoImage(image) # ウィンドウオブジェクトの作成 window = sg.Window('Show Picture', layout) # イベントのループ while True: event, values = window.read() print(values['INPUT_FILE']) print(values['IMAGE_MODE']) if event == sg.WIN_CLOSED: break if values['INPUT_FILE'] != '': image_element[0].update(data=get_image_data(values['INPUT_FILE'], values['IMAGE_MODE'])) # ウィンドウクローズ処理 window.close()
デフォルトの画像読み込みでは、GIFとPGM/PPM画像しか対応していないようです。
画像を読み込み表示するライブラリとして、Pillowを使用しました。
補足として、PySimpleGUIでは、ボタンなどをウィジェットではなく、Elementと呼ぶみたいです。
(Tkinterなど他のライブラリのウィジェットと区別するため)
下記の記事を参考にさせた頂きました
実行結果
1.初期画面
2.「参照」ボタンで画像ファイルを選択して画像表示
3.画像モードで「LA(グレースケール)」を選択
今回はここまで。
まとめ
PySimpleGUIを使って、簡単なGUIを作ることができました。
画面レイアウトがソースコードに強く紐づいているため、画面レイアウトは間違えにくいと感じました。
公式のドキュメントを見ると、画面のテーマ変更なども簡単にできるようなので、試してみたいと思いました。
PythonのGUIのライブラリ選びには、下記もご参考いただければと思います。
■【Python】GUIライブラリ13個を比較【初心者へのオススメあり】
Pythonのライブラリの特徴やライセンスなどがまとめてあります。