Pythonで作るGUIアプリ入門 Part21 -トグルボタンの設定-
トグルボタンの設定
トグルボタンとは、1つのボタンでO N/OFF(有効/無効)といった状態切り替えを行うボタンです。スマートフォンなどでは、WiFiやBluetoothのO N/OFF設定などで使われています。
ウィンドウ中央に設定したトグルボタンをクリックする事で図21-1、図21-2のようにON/OFFを切り替えるGUIアプリを作成して、トグルボタンの設定を解説していきます。
コードは以下の通りとなります。
import PySimpleGUI as sg
layout = [
[sg.Text('スイッチを押して下さい')],
[sg.Image(filename='switch-on.png', key='-Toggle-', enable_events=True)]
]
window = sg.Window('トグルスイッチ', layout)
toggle_is_on = False
while True:
event, value = window.read() # イベントの入力を待つ
if event == '-Toggle-':
toggle_is_on = not toggle_is_on
window.find_element('-Toggle-').Update(
'switch-on.png' if toggle_is_on else 'switch-off.png')
elif event is None:
break
window.close()
レイアウトの設定
トグルボタンは、ボタンウィジェットではなくイメージウィジェットを使用します。レイアウトの2行目sg.Image(filename='switch-on.png', key='-Toggle-', enable_events=True)としてトグルボタンとして使用する画像のパスをfilename='switch-on.png'として指定しています。キーは、key='-Toggle-',として割り当てます。そして、この画像をクリックした時にイベントが発生するようにenable_events=Trueを設定します。
layout = [
[sg.Text('スイッチを押して下さい')],
[sg.Image(filename='switch-on.png', key='-Toggle-', enable_events=True)]
]
イベントの設定
イベントの設定に入る前に、トグルボタンがONなのかOFFなのかを表すフラグ変数を設定します。今回は、toggle_is_on = Falseとします。この変数がTrueなのかFalseなのかでトグルボタンのON /OFFを判断するようにします。
toggle_is_on = False
トグルボタンkey='-Toggle-'が押された時のイベントを設定します。not
演算子を使い、toggle_is_on = not toggle_is_on とする事でフラグ変数の値を常に反転させます。window.find_element('-Toggle-').でトグルボタンウィジェットを指定し、Update( 'switch-on.png' if toggle_is_on else 'switch-off.png')とする事で画像を入れ替えます。今回は、'switch-on.png'と'switch-off.png'の2つの画像でトグルON /OFFを表しています。
if event == '-Toggle-':
toggle_is_on = not toggle_is_on
window.find_element('-Toggle-').Update(
'switch-on.png' if toggle_is_on else 'switch-off.png')
以上のようにトグルボタンを設定出来ます。チェックボタンやラジオボタンでも設定のON /OFFを表現する事は出来ますが、トグルボタンでグラフィカルに表現した方が可愛いGUIが作れるようになります。
記事が参考になりましたら、❤️を押していただけると励みになります😊
「世界一やさしいPythonデスクトップアプリ開発のはじめ方」を2022/3/19にAmazon Kindleで発売しました!
Amazon売れ筋ランキングで…
・Kindle有料(全体):685位
・プログラミング(Kindleストア):1位
・データベース(Kindleストア):1位
・デジタルエンターテイメント(Kindleストア):1位
と大変好評をいただいております。ありがとうございます。
Kindle Unlimitedなら無料ですので、ぜひご一読下さい!
この記事が気に入ったらサポートをしてみませんか?