PysimpleGui コンボボックスを動的に変化させる方法

今回は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)


上のプログラムが呼び出され、曲のコンボボックスが動的に変化する、ということになります。

TOPページ