今回はPysimpleGuiのコンボボックスを動的に変化させる方法についての紹介です。
一つのコンボボックスでAを選んだら、もう一つのコンボボックスでB,Cが表示。
Dを選んだら、E,Fが表示、というやつです。
import PySimpleGUI as sg
def get_songs(album_name):
"""アルバム名を受け取り、曲名のリストを返す"""
song_dict = {'しばたさとこ島': ['芝の青さ', 'ばら'],
'いじわる全集': ['いきすぎた友達', '部屋を買おう']}
return song_dict[album_name]
layout = [[sg.Text('アルバム')],
[sg.Combo(values=['しばたさとこ島', 'いじわる全集'], size=(20, 1), key='ALBUM', enable_events=True)],
[sg.Text('曲')],
[sg.Combo(values=[''], size=(20, 1), key='SONG')],
[sg.Button('Exit')]]
window = sg.Window('コンボボックステスト', size=(300, 300)).Layout(layout)
while True:
event, values = window.Read()
if event is None or event == 'Exit':
break
if event == 'ALBUM':
album = values['ALBUM']
songs = get_songs(album)
window.FindElement('SONG').Update(values=songs)
window.Close()
アルバムのコンボボックスの選択に応じて、曲のコンボボックスの中身を変えるようにしています。
ポイントはenable_events=True
とすることで、changeした際にイベントとして取得できるようになります。
[sg.Combo(values=['しばたさとこ島', 'いじわる全集'], size=(20, 1), key='ALBUM', enable_events=True)]
ここの部分ですね。コンボボックスが選択されると、event == 'ALBUM'
でメソッドを使用できます。
if event == 'ALBUM':
album = values['ALBUM']
songs = get_songs(album)
window.FindElement('SONG').Update(values=songs)
上のプログラムが呼び出され、曲のコンボボックスが動的に変化する、ということになります。