![見出し画像](https://assets.st-note.com/production/uploads/images/64301842/rectangle_large_type_2_8a8af7f884fddf60ec3d5be87286ec01.png?width=1200)
Pythonで作るGUIアプリ入門 Part7 -チェックボックスの設定-
チェックボックスの設定
チェックボックスを使用すれば、いくつかある選択肢から複数の項目を選択する事が出来ます。
チェックボックスは、sg.Checkbox(text)で設定する事が出来ます。textには、選択肢を文字列で入力します。 ラジオボタンと異なり、複数選択できますのでグループIDは特に不要です。それぞれにキーを割り当てて特定します。
お気に入りのテーマパークをチェックボックスで選び、選んだ結果をポップアップで出力するGUIアプリを作成して、チェックボックスの設定を学びましょう。GUIは、図7-1、図7-2、図7-3のようになります。
![](https://assets.st-note.com/img/1636468066286-Q0VA781ZfB.png?width=1200)
![](https://assets.st-note.com/img/1636468070430-eS5vjnQiZ1.png?width=1200)
![](https://assets.st-note.com/img/1636468092051-JfciQZE0qZ.png?width=1200)
コードは、以下のコードとなります。
import PySimpleGUI as sg
destination = {
'-Disney-': 'ディズニーランド',
'-Lego-': 'レゴランド',
'-USJ-': 'USJ'
}
layout = [
[sg.Text('お気に入りのテーマパークはどこですか(複数回答可)?')],
[sg.Checkbox('ディズニーランド', default=True, key='-Disney-')],
[sg.Checkbox('レゴランド', key='-Lego-')],
[sg.Checkbox('USJ', key='-USJ-')],
[sg.Button('回答', key='-Btn-')]
]
window = sg.Window('お気に入りのテーマパーク調査', layout)
while True:
event, value = window.read() # イベントの入力を待つ
if event == '-Btn-':
firstloop = True
message = '行きたい場所は、'
for key in destination.keys():
if value[key] == True:
if firstloop:
message = message + destination[key]
firstloop = False
else:
message = message + 'と' + destination[key]
message = message + 'です'
if firstloop:
message = 'どこにも行きたくないようです'
sg.popup(message)
break
elif event is None:
break
window.close()
レイアウトに入る前に辞書型変数 destinationを定義しています。辞書のキーにCheckboxウィジェットのKeyを設定し、値にCheckboxウィジェットに表示させるテキストを格納しています。この変数は、ポップアップさせるメッセージをチェックボックスの選択に応じて変更するために使います。
destination = {
'-Disney-': 'ディズニーランド',
'-Lego-': 'レゴランド',
'-USJ-': 'USJ'
}
レイアウトの設定
1行目では、テキストで選択肢の質問を設定しています。
2行目から4行目でチェックボックスの選択肢を設定しています。ラジオボタンと異なり、複数選択可能ですのでグループホームIDは不要です。選択肢にはテーマパーク名とそれぞれのキーを割り当てています。また、2行目のディズニーランドには default=True として最初から選択された状態を設定しています。
5行目では回答ボタンとキーを設定しています。
layout = [
[sg.Text('お気に入りのテーマパークはどこですか(複数回答可)?')],
[sg.Checkbox('ディズニーランド', default=True, key='-Disney-')],
[sg.Checkbox('レゴランド', key='-Lego-')],
[sg.Checkbox('USJ', key='-USJ-')],
[sg.Button('回答', key='-Btn-')]
]
イベントの設定
回答ボタン’-Btn-’が押された時のイベントを設定します。
if event == '-Btn-':
最初に、フラグ変数 firstloopを設定します。このフラグは、次のfor文で最初のループの時とそうではない時を識別するために使用します。
また、ポップアップに表示させたい変数messageもここで宣言と初期値を定義します。
firstloop = True
message = '行きたい場所は、'
for文でdestination.keys()として、辞書型の変数destinationのキーを変数keyに一つづつ取り出して、ループを回します。最初のループでは、key= '-Disney-'となりますのでif文はif value['-Disney-'] == True: となります。
図7-1のように、ディズニーランドにチェックが入っている場合は、if文がTrueとなって次の処理に進みます。次の処理では、そのループが最初のループかそうでないかをフラグ変数firstloopで判定します。もし、最初のループであった場合には message = message + destination[key] として、’ディズニーランド’ を message の後ろに追加します。そして、firstloopのフラグをFalseに変更します。こうすることで、ループが2回目の時にはelse:処理を実施します。チェックボックスが複数選択されて場合は図7-2のようになります。
ループ1回目と2回目では、messageに追加する文字列を変更するため、firstloop変数を使用しました。
全てのループが完了したら、messageに文字列 ’です’ を追加します。
for key in destination.keys():
if value[key] == True:
if firstloop:
message = message + destination[key]
firstloop = False
else:
message = message + 'と' + destination[key]
message = message + 'です'
もしも、firstloopがfor文以降もTrueのままの場合はチェックボックスが一つも選択されていないことになりますので、messageを 'どこにも行きたくないようです' とします(図7-3参照)。
if firstloop:
message = 'どこにも行きたくないようです'
最後にmessageをポップアップで表示します。
sg.popup(message)
以上のようにして、チェックボックスを設定する事が出来ます。ラジオボックスと似ている部分もありますが、グループIDが不要で複数選択出来ます。
今回のように複数選択のチェックボックスではなく、利用規約に同意するか否かの確認のチェックボックスとしても良いでしょう。
次回は、ファイルダイアログ(ファイル&フォルダのパス取得)の使い方を説明します。
GUIアプリ入門講座は毎日更新します!
記事が参考になりましたら、❤️を押していただけると励みになります😊