見出し画像

Pythonで作るGUIアプリ入門 Part6 -ラジオボタンの設定-

ラジオボタンの設定

ラジオボタンを使用すれば、複数の選択肢の中から1つだけ選んでもらいたいときに使用出来ます。
ラジオボタンは、sg.Radio(text, group_id)で設定する事が出来ます。textには、選択肢を文字列で入力します。 group_idは、ラジオボタンのグループであり、同一のグループで1つだけ選択できるように制約を加えます。

旅の目的地をラジオボタンで選び、選んだ結果をポップアップで出力するGUIアプリを作成して、ラジオボタンの設定を学びましょう。GUIは、図6-1と図6-2のようになります。

図6-1
図6-2

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

import PySimpleGUI as sg

layout = [
    [sg.Text('次の連休は、どこへ一番行きたいですか?')],
    [sg.Radio('ディズニーランド', group_id='destination', key='-Disney-')],
    [sg.Radio('レゴランド', group_id='destination', key='-Lego-')],
    [sg.Radio('USJ', group_id='destination', default=True, key='-USJ-')],
    [sg.Button('回答', key='-Btn-')]
]

window = sg.Window('旅の目的地を選択', layout)

while True:
    event, value = window.read()  # イベントの入力を待つ

    if event == '-Btn-':
        if value['-Disney-'] == True:
            output = 'ディズニーランド'
        elif value['-Lego-'] == True:
            output = 'レゴランド'
        else:
            output = 'USJ'

        message = output + 'として回答を受け付けました。'

        sg.popup(message)
        break
    elif event is None:
        break

window.close()

レイアウトの設定

1行目では、テキストで選択肢の質問を設定しています。

2行目から4行目でラジオボタンの選択肢を設定しています。いずれのラジオボタンも、group_id = 'destination' としてグループ設定をしていますので、3つの選択肢から1つしか選べないようになっています。そして、選択肢にはテーマパーク名とそれぞれのキーを割り当てています。また、4行目のUSJには default=True として最初から選択された状態(デフォルト値)を設定しています。

5行目では回答ボタンとキーを設定しています。

layout = [
    [sg.Text('次の連休は、どこへ一番行きたいですか?')],
    [sg.Radio('ディズニーランド', group_id='destination', key='-Disney-')],
    [sg.Radio('レゴランド', group_id='destination', key='-Lego-')],
    [sg.Radio('USJ', group_id='destination'default=True, key='-USJ-')],
    [sg.Button('回答', key='-Btn-')]
]

イベントの設定

回答ボタン’-Btn-’が押された時のイベントを設定します。

    if event == '-Btn-':    

if文でラジオボタンで選ばれた値に応じて、変数outputに入れる値を変更します。ラジオボタンのvalue[key] はブール値となりますので、TrueもしくはFalseとなります。ラジオボタンが選択されていればTrue、選択されていなければFalseとなります。

        if value['-Disney-'] == True:
            output = 'ディズニーランド'
        elif value['-Lego-'] == True:
            output = 'レゴランド'
        else:
            output = 'USJ'

選択肢の結果を変数outputに格納しました。 変数message を output + 'として回答を受け付けました。' として選択肢に応じたメッセージとします。そして、この変数をポップアップで表示させます。

        message = output + 'として回答を受け付けました。'

        sg.popup(message)

以上のようにして、ラジオボタンを設定する事が出来ます。1つのGUI中に複数のグループを使用する事も出来ます。

例えば、以下のようにグループを2つ作る事もできます。詳細の説明は割愛しますが、画像とコードを載せますので参考になさって下さい。コード中で、if文の条件を分かり易さのためにif value['-Disney-'] == True:としていましたが、今回はif value['-Disney-']:としています。

import PySimpleGUI as sg

layout = [
    [sg.Text('次の連休は、どこへ一番行きたいですか?')],
    [sg.Radio('ディズニーランド', group_id='destination', key='-Disney-')],
    [sg.Radio('レゴランド', group_id='destination', key='-Lego-')],
    [sg.Radio('USJ', group_id='destination', default=True, key='-USJ-')],
    [sg.Text('-' * 60)],
    [sg.Text('目的地を選ぶ決め手は何ですか?')],
    [sg.Radio('距離', group_id='reason', key='-Distance-')],
    [sg.Radio('価格', group_id='reason', key='-Price-')],
    [sg.Button('回答', key='-Btn-')]
]

window = sg.Window('旅の目的地を選択', layout)

while True:
    event, value = window.read()  # イベントの入力を待つ

    if event == '-Btn-':
        if value['-Disney-']:
            output1 = 'ディズニーランド'
        elif value['-Lego-']:
            output1 = 'レゴランド'
        else:
            output1 = 'USJ'

        if value['-Distance-']:
            output2 = '距離'
        else:
            output2 = '価格'

        message = '行きたい場所は' + output1 + 'で、' + 'その理由は' + output2 + 'です。'
        sg.popup(message)
        break
    elif event is None:
        break

window.close()


次回は、チェックボックスの使い方を説明します。

GUIアプリ入門講座は毎日更新します!
記事が参考になりましたら、❤️を押していただけると励みになります😊



「世界一やさしいPythonデスクトップアプリ開発のはじめ方」を2022/3/19にAmazon Kindleで発売しました!

Amazon売れ筋ランキングで…

・Kindle有料(全体):14位!!!
(ありがとうございます💕)
・プログラミング(Kindleストア):1位
・データベース(Kindleストア):1位
・デジタルエンターテイメント(Kindleストア):1位

と大変好評をいただいております。ありがとうございます。
Kindle Unlimitedなら無料ですので、ぜひご一読下さい!

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