PySimpleGUI中两个FileBrowse组件事件触发颠倒问题咨询
PySimpleGUI FileBrowse事件触发颠倒的解决方案
你遇到的事件颠倒问题,核心原因是事件判断逻辑使用了包含匹配而非精确匹配,这种写法容易因文件名包含关键字导致误判,看起来像是事件触发颠倒。
问题分析
你的代码中用'cusid' in event和'SPlist' in event做判断,如果选中的文件名恰好包含对应字符串(比如某个SPECIAL PRICE LIST文件名带"cusid"),就会触发错误的分支,造成事件颠倒的假象。即使你的组件key设置正确,精确匹配也能彻底避免这类问题。
修正后的代码
将事件判断改为精确匹配event == 'cusid'和event == 'SPlist',完整代码如下:
import PySimpleGUI as sg sg.theme('SystemDefaultForReal') layout = [ [sg.FileBrowse('CUSID', size=(15,2), file_types=('Excel File', '*.xlsx'), key='cusid', enable_events=True, tooltip='cusid'), sg.FileBrowse('SPECIAL PRICE LIST', size=(18,2), file_types=('Excel File', '*.xlsx'), key='SPlist', enable_events=True)], [sg.Button('Convert', key='submit'), sg.Button("Cancel", k='cancel')], [sg.StatusBar('', size=(50,1), key='status', justification='center'), sg.Button('Replace Header', key='-replace-', visible=False), sg.Button('Replace Headers', key='-replace2-', visible=False)] ] window = sg.Window("Special Price Converter", layout, element_justification='center', finalize=True, icon=r'C:\Python\apps\specialpriceconvert\icon.ico') while True: event, values = window.read() if event in (sg.WIN_CLOSED, 'cancel'): break elif event == 'cusid': window['status'].update(f"已选择CUSID文件") elif event == 'SPlist': window['status'].update(f"已选择SPECIAL PRICE LIST文件") window.close()
额外建议
- 若需要显示选中的文件路径,可通过
values['cusid']和values['SPlist']获取,比如修改状态更新代码为window['status'].update(f"已选择CUSID文件: {values['cusid']}")。 - 确保PySimpleGUI为最新版本,旧版本可能存在组件事件触发bug,执行
pip install --upgrade PySimpleGUI即可升级。
内容的提问来源于stack exchange,提问作者David L
相关产品推荐
相关产品推荐

