備忘録のきっかけ
Pythonで手早くコンソールを実装しようとしていたら、PySimpleGUIに行き着いた。大まかに使用方法をまとめておきたい
mainとなるwhileループ
import PySimpleGUI as sg
# ウィンドウのレイアウトを定義
layout = [
[sg.Text('Hello')],
[sg.Button('OK'), sg.Button('Cancel')]
]
# ウィンドウを作成
window = sg.Window('My Window', layout)
# メインループ
while True:
event, values = window.read()
# イベントの処理
if event == sg.WINDOW_CLOSED or event == 'Cancel':
break
if event == 'OK':
sg.popup('OKボタンがクリックされました!')
# ウィンドウを閉じる
window.close()
- UIに表示したいものをlayoutに定義して、windowを作成する。
- layoutは一番外側がレコード、その中がカラムになる構造になっていて、layoutにlayoutを入れることで複雑なレイアウトを作ることもできる(ただし、配置などをうまく整えるのは結構厳しそう)
- whileループ内で、layout内で定義したイベント(sg.Button('OK')ならOKがイベントになる)を待ち受ける。ボタンならボタンのクリックで発火するのでなく、常にイベントループ内で監視して処理を決める形を取る。
- 処理が複雑になったり入れ子になればなるほど厳しいそう... そもそもきちんと設計を考えて、ネストが深くならないように設計するのが重要そうに見えた
まとめ
input欄ひとつ、ボタン二つくらいの規模だと最速でGUIを組めそう。その代わりリスト内にサムネイルを表示させつつ、選択できるようにして隣のサムネイル欄に何か表示する、みたいなことを考え始めるとこのwhileループないがどうなるんだろうという気がする。割り切って使うのが吉