PySimpleGUI如何捕获组合框选择事件联动更新另一组合框默认值
PySimpleGUI 组合框选择联动实现方法
核心问题原因
PySimpleGUI的输入类元素默认不会在值变更时主动向事件循环抛出事件,你之前没有给触发联动的Name组合框开启事件触发参数,所以无法捕获选择动作。
实现步骤
- 给作为联动触发源的Name组合框添加
enable_events=True参数,开启值变更事件触发 - 在主事件循环中添加对应元素key的事件分支,捕获选择动作
- 选中事件触发后,按业务规则匹配对应Status值,调用元素的
update()方法设置Status组合框的默认值
修改后可运行代码示例
import gspread import pandas as pd import PySimpleGUI as sg # 省略你原来的数据源读取逻辑 # lst = records_df.Label.to_list() lst = ["张三", "李四", "王五"] # 示例测试数据 Status = ['A','B','C','D'] # 自定义名称到状态的映射规则,替换成你实际的业务匹配逻辑即可 # 比如可以从records_df中按选中的Label匹配对应的Status值 name_status_map = { "张三": "A", "李四": "B", "王五": "C" } layout = [ [sg.Text('Please Choose:',size=(39,1))], # 给触发联动的combo添加enable_events=True,开启选择事件 [sg.Combo(lst, key='combo', size=(20,1), enable_events=True),sg.Text('Name:', size=(18,1))], [sg.Combo(Status, key='comboStatus', size=(20,1)),sg.Text('Status:', size=(18,1))], [ sg.Button('Exit', key='Exit', size=(18,1)), sg.Button('Submit', key='Submit', size=(20,1))] ] window = sg.Window('表单', layout) while True: event, values = window.read() if event == sg.WIN_CLOSED or event == 'Exit': break # 捕获Name组合框的选择事件 elif event == 'combo': selected_name = values['combo'] # 匹配对应默认状态,无匹配时设为空字符串 target_status = name_status_map.get(selected_name, '') # 更新Status组合框的默认值 window['comboStatus'].update(value=target_status) elif event == 'Submit': # 原有提交逻辑写在此处 selected_data = values sg.popup(f"提交成功,选中内容:{selected_data}") window.close()
补充说明
如果联动时需要同时更新Status组合框的可选选项列表,只需要在update()方法中传入values=新选项列表参数即可,例如:window['comboStatus'].update(value=target_status, values=新的可选状态列表)
内容的提问来源于stack exchange,提问作者Gidil
相关产品推荐
相关产品推荐

