如何阻止PySimpleGUI中slider组件Update方法触发事件?
问题解答
1. 更新滑块范围时避免触发slider事件
调用window['slider'].Update()时,加上do_not_send_event=True参数,就能阻止这次更新操作触发slider事件。修改后的代码片段如下:
window['slider'].Update(range=(0, 0), do_not_send_event=True)
这个参数的作用就是告知PySimpleGUI:本次由代码触发的元素更新,不需要发送对应的事件,完全匹配你的需求。
2. Combo更新不触发事件是否是bug?
这不是bug,属于PySimpleGUI的设计逻辑:
- Combo元素的
enable_events=True仅对用户手动选择选项的操作触发事件,通过代码调用Update()修改选中值不会触发事件。 - 而Slider元素在更新范围(range)时,默认会触发事件——因为范围变更可能强制修改滑块当前值(比如原范围(1,10)、值为5,改成(0,0)后值会被强制设为0),框架默认发送了事件,但可以通过上述
do_not_send_event参数关闭。
完整修改后的代码:
import PySimpleGUI as sg layout = [ [sg.Combo([], default_value='', key='combo', size=(30, 15), enable_events=True)], [sg.Slider(range=(1, 10), size=(30, 15), orientation='h', key='slider', enable_events=True)], [sg.Button('Add Apple')] ] window = sg.Window('Combo Box Example', layout) while True: event, values = window.read() print(event,"event") if event == sg.WIN_CLOSED: break elif event == 'Add Apple': values['combo'] = "Add Apple" window['combo'].Update("Add Apple") # 添加参数阻止触发slider事件 window['slider'].Update(range=(0, 0), do_not_send_event=True) elif event == 'slider': print("slider is slided") window.close()
内容的提问来源于stack exchange,提问作者Andythe_great
相关产品推荐
相关产品推荐

