python - Pysimplegui Combo 动态刷新
问题描述
今天是个好日子。Is there a way to dynamically add json values in the second Combo when the json element in the first Combo is selected?
import json
import PySimpleGUI as sg
file = {"item 1": [{"name": "title 1"}, {"name": "title 2"}], "item 2": [{"name": "title 3"}, {"name": "title 4"}]}
j_file = json.dumps(file)
layout = [[sg.Text('items'), sg.Combo(j_file, key='some_key', size=(30, 0))], # there must be items
[sg.Text('titles'), sg.Combo(j_file, key='other_key', size=(30, 0))]] # there must be values of selected item
window = sg.Window('testing', layout)
while True:
event, value = window.read()
if event == sg.WINDOW_CLOSED:
break
解决方案
这里不是直接使用 json 数据j_file
,而是使用字典file
。
选择第一个组合后,会生成一个事件,然后使用新列表更新第二个组合。
import json
import PySimpleGUI as sg
file = {"item 1": [{"name": "title 1"}, {"name": "title 2"}], "item 2": [{"name": "title 3"}, {"name": "title 4"}]}
j_file = json.dumps(file)
layout = [[sg.Text('items'), sg.Combo(list(file.keys()), enable_events=True, key='some_key', size=(30, 0))], # there must be items
[sg.Text('titles'), sg.Combo([], key='other_key', size=(30, 0))]] # there must be values of selected item
window = sg.Window('testing', layout)
while True:
event, values = window.read()
if event == sg.WINDOW_CLOSED:
break
elif event =='some_key':
item = values[event]
title_list = [i["name"] for i in file[item]]
window['other_key'].update(value='', values=title_list)
window.close()
推荐阅读
- python - 在 Pandas 中,如何对特定的连续列进行一些算术计算
- google-apps-script - 如何从文档中获取评论和回复列表并将内容添加到工作表中?
- visual-studio - 如何使用 Visual Studio 测试资源管理器从 DynamicData 运行一项特定测试?
- c# - 当 Oracle 存储过程仅返回 -1 时对其进行故障排除
- python - 将具有多个值的熊猫数据框列字符串拆分为单独的行
- html - 如何显示所有名称?
- sql - 消息 7202,级别 11,状态 2,第 1 行在 sys.servers 中找不到服务器“acct”
- google-apps-script - 谷歌表格,两种字体大小一个单元格
- swift - 如何快速获取两个 UICollectionView 的 ScrollView?
- nginx - nginx 反向代理 - 如何为多个应用程序提供服务