Pythonで作るGUIアプリ入門 Part3 -ボタンとイベントの追加-
ボタンへのイベント追加
レイアウトにボタンを設置するだけでは、イベントは何も発生しません。ボタンが押された時に、ポップアップを表示させたり、何か別の処理を開始するためにはイベントをボタンに追加する必要があります。
GUIレイアウトの作成
GUIのレイアウトを作成しましょう。Part2で学んだように、以下のコードのようにボタンをレイアウトに設置してウィンドウに表示させます。ウィンドウのサイズはWidth=200, Height=50としています。
import PySimpleGUI as sg
layout = [
[sg.Button('ポップアップを表示')]
]
window = sg.Window('ボタンにイベントを追加', layout, size=(200, 50))
event, values = window.read()
window.close()import PySimpleGUI as sg
layout = [
[sg.Button('ポップアップを表示')]
]
window = sg.Window('ボタンにイベントを追加', layout, size=(200, 50))
プログラムを実行すると、以下のようなウィンドウが表示されます。まだ、ボタンを押した際のイベントを追加していませんのでボタンを押しても何も起こりません。
ボタンにイベントを追加
ボタンにイベントを追加していきましょう。イベントを追加するには、以下のウィンドウが読み込まれた時に、クリックなどのイベント入力を待つ処置を追加します。
while True:
event, value = window.read() # イベントの入力を待つ
window.close()
このwhile True:の中にイベントを追加していきます。if文で’ポップアップを表示’が押された場合(イベントが発生した場合)にポップアップを表示させます。
while True:
event, value = window.read() # イベントの入力を待つ
if event == 'ポップアップを表示':
sg.popup('ボタンが押されました')
break
window.close()
プログラムを実行して、ボタンをクリックすると先ほどまでは何も起こりませんでしたが、イベントを追加しましたので以下の画像のようなポップアップが表示されます。
ウィンドウをクローズする際の処理を追加
ボタンにイベントが追加できました。最初のウィンドウをxボタンもしくはMacの場合は赤ボタンで閉じようとすると以下のエラーが発生してしまいます。このエラーは、eventがNoneの時の処理をコーディング出来ていないため発生しています。
先ほどのイベント処理を以下のように書き換えましょう。
while True:
event, value = window.read() # イベントの入力を待つ
if event == 'ポップアップを表示':
sg.popup('ボタンが押されました')
break
elif event is None:
break
ウィンドウのxボタンを押して閉じる際には、eventにNoneが入ります。このため、event is Noneの処理としてbreak(プログラムを閉じる)処理を追加しています。
再度、プログラムを実行してxボタンでウィンドウを閉じてもエラーが発生せずにプログラムを終了出来る事を確認しましょう。
最終的なコードは、以下の通りとなります。これがイベントの基本となります。一旦覚えてしまいますと簡単ですので、ぜひ試してみて下さい。
import PySimpleGUI as sg
layout = [
[sg.Button('ポップアップを表示')]
]
window = sg.Window('ボタンにイベントを追加', layout, size=(200, 50))
while True:
event, value = window.read() # イベントの入力を待つ
if event == 'ポップアップを表示':
sg.popup('ボタンが押されました')
break
elif event is None:
break
window.close()
明日も更新します。記事が参考になりましたら、❤️を押していただけると励みになります😊