PySimpleGUI按钮按序启用异常:点击已启用按钮无响应问题排查
问题原因与解决方法
问题出在你给按钮B设置了enable_events = False——这个参数决定按钮是否会将点击事件传递到事件循环。哪怕后续你把按钮B的disabled改为False启用它,只要enable_events是False,点击就不会触发任何响应。
另外,用按钮文本判断事件(比如event == 'Generate regions')不够稳妥,后续修改按钮文本会导致事件逻辑失效,建议改用按钮的key来判断事件。
修正后的代码
import PySimpleGUI as sg button_size = 15 layout = [ [sg.Button('Begin >>')], # 保留enable_events=True(默认也可以不写,这里显式写是为了明确) [sg.Button('Generate regions', key='A', disabled=True, enable_events=True, size=button_size)], # 去掉enable_events=False,默认就是True,也可以显式写enable_events=True [sg.Button('Apply to image', key='B', disabled=True, size=button_size)], ] window = sg.Window(title='Name', layout=layout) # Event loop while True: event, values = window.read() if event == sg.WIN_CLOSED: break if event == 'Begin >>': window['A'].update(disabled=False) # 改用key判断事件,更可靠 if event == 'A': window['B'].update(disabled=False) # 这里可以添加按钮A对应的任务逻辑 if event == 'B': # 这里添加按钮B对应的任务逻辑 print('按钮B被点击了') window.close()
说明
- 按钮B删除
enable_events = False后,启用点击就能正常触发事件,你可以在event == 'B'的分支里添加对应的业务逻辑。 - 用
key判断事件,后续修改按钮文本不会影响事件处理逻辑,代码更健壮。
内容的提问来源于stack exchange,提问作者Gordon Dennis
相关产品推荐
相关产品推荐

