はじめに
今回はPySimpleGUIでイベントを設定する方法についての記事になります。
イベントのイメージとしては
「GUI上でボタンが押されたときにXXXXする。」みたいな動作があるとすると、
「ボタンが押される」っていうところがイベントです。
PySimpleGUIでは、デフォルトでイベント設定されているものと、されていないものがあるので
その点はリファレンスなど参照の上、注意して実装していく必要があります。
(PySimpleGUIのドキュメント:https://www.pysimplegui.org/en/latest/)
デフォルトでイベント設定されているwidgetを使ったイベント設定
ここでは、文章を入力しボタンを押すと、文章の前後に***が装飾された文章がポップアップされるコードを紹介します。
*2つのウィジェットにkeyという引数で、識別子を与える
*ボタンはデフォルトでイベント設定されているので、ボタンが押されたときにeventに識別子が格納される
*入力系のwidgetに与えた値は values[設定した識別子] で確認できる
*ボタンは入力系のwidgetではないので、values['-BUTTON-']とするとエラーになる
import PySimpleGUI as sg
input_widget = sg.InputText(default_text="ここに文字を入力してください。",key="-INPUT-")
button_widget = sg.Button("ポップアップの表示",key="-BUTTON-")
layout = [
[input_widget],
[button_widget],
]
window = sg.Window("sample1",layout)
while True:
event, values = window.read()
if event == sg.WIN_CLOSED:
break
if event == '-BUTTON-':
popup_text = "***"+values['-INPUT-']+"***"
sg.popup(popup_text)
window.close()
デフォルトでイベント設定されていないwidgetを使ったイベント設定
ここではラジオボタンのチェックに応じて、表示内容が変わるコードを紹介します。
*Radioボタンはデフォルトではイベント設定されないので、enable_event=Trueでイベント設定をかける
*Radioボタンを選択した際に格納されるvalueはTrue/False
*どのボタンが押されたかはif文で判定し、押されたボタンに対する処理を記述
import PySimpleGUI as sg
check_widget1 = sg.Radio(text="A",group_id=1,enable_events=True,key='-Check-')
check_widget2 = sg.Radio(text="B",group_id=1,enable_events=True,key='-Check-1')
check_widget3 = sg.Radio(text="C",group_id=1,enable_events=True,key='-Check-2')
text_widget = sg.Text(text="現在Aを選択中です。")
layout = [
[check_widget1],
[check_widget2],
[check_widget3],
[text_widget]
]
window = sg.Window('demo',layout)
while True:
event, value = window.Read()
if event == sg.WIN_CLOSED:
break
if '-Check-' in event:
if value["-Check-"]:
text_widget.update(value="現在Aを選択中です。")
elif value["-Check-1"]:
text_widget.update(value="現在Bを選択中です。")
elif value["-Check-2"]:
text_widget.update(value="現在Cを選択中です。")
else:
pass
window.close()
終わりに
今回はイベントの設定方法について書いてみました。
チェックボックスやラジオボタンの選択状況に応じて、リアルタイムに表示内容が変化するのはおもしろいですよね。
PySimpleGUIではwidgetの値の更新にupdateメソッドを使いますが、何をupdateできるかはwidget毎に変わりますので、
ドキュメントも気が向いたときに参照してみてください。
お疲れ様でした。