0
1

More than 1 year has passed since last update.

PySimpleGUIでのイベント設定方法

Posted at

はじめに

今回はPySimpleGUIでイベントを設定する方法についての記事になります。

イベントのイメージとしては
「GUI上でボタンが押されたときにXXXXする。」みたいな動作があるとすると、
「ボタンが押される」っていうところがイベントです。

PySimpleGUIでは、デフォルトでイベント設定されているものと、されていないものがあるので
その点はリファレンスなど参照の上、注意して実装していく必要があります。
(PySimpleGUIのドキュメント:https://www.pysimplegui.org/en/latest/)

デフォルトでイベント設定されているwidgetを使ったイベント設定

ここでは、文章を入力しボタンを押すと、文章の前後に***が装飾された文章がポップアップされるコードを紹介します。
*2つのウィジェットにkeyという引数で、識別子を与える
*ボタンはデフォルトでイベント設定されているので、ボタンが押されたときにeventに識別子が格納される
*入力系のwidgetに与えた値は values[設定した識別子] で確認できる
*ボタンは入力系のwidgetではないので、values['-BUTTON-']とするとエラーになる

demo1.py
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文で判定し、押されたボタンに対する処理を記述

demo1.py
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毎に変わりますので、
ドキュメントも気が向いたときに参照してみてください。
お疲れ様でした。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1