見出し画像

Pythonで作るGUIアプリ入門 Part21 -トグルボタンの設定-

トグルボタンの設定

トグルボタンとは、1つのボタンでO N/OFF(有効/無効)といった状態切り替えを行うボタンです。スマートフォンなどでは、WiFiやBluetoothのO N/OFF設定などで使われています。

ウィンドウ中央に設定したトグルボタンをクリックする事で図21-1、図21-2のようにON/OFFを切り替えるGUIアプリを作成して、トグルボタンの設定を解説していきます。

図21-1
図21-2

コードは以下の通りとなります。

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なら無料ですので、ぜひご一読下さい!

この記事が気に入ったらサポートをしてみませんか?