You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 00:02:32