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

如何在调用ttk.Combobox的set方法时触发<<ComboboxSelected>>事件

结论

ttk.Combobox 的 set() 方法默认不会触发<<ComboboxSelected>>虚拟事件,该事件仅在用户手动点击下拉列表选中选项时才会被触发,通过代码修改控件值的操作不会自动触发该事件。

实现需求的两种可行方案

如果你需要在调用set()后执行绑定的选中逻辑,可以用以下两种方式实现:

  • 方案1:调用set()后手动生成虚拟事件
    调用event_generate()方法主动触发<<ComboboxSelected>>事件,无需修改原有绑定逻辑,代码侵入性最低。示例代码如下:
import tkinter as tk
from tkinter import ttk

master = tk.Tk()

def select_combobox(event):
    to = int(gradations.get())
    print(to)
    for entry in entry_list[:to]:
        entry.config(state="normal")
    for entry in entry_list[to:]:
        entry.config(state="disable")

gradations = ttk.Combobox(master)
gradations['values'] = ('1', '2', '3')
gradations.bind("<<ComboboxSelected>>", select_combobox)
gradations.pack()

entry_list = []
entry1 = tk.Entry(master)
entry1.pack()
entry_list.append(entry1)
entry2 = tk.Entry(master)
entry2.pack()
entry_list.append(entry2)
entry3 = tk.Entry(master)
entry3.pack()
entry_list.append(entry3)

# 先set值,再手动触发事件
gradations.set(1)
gradations.event_generate("<<ComboboxSelected>>")

master.mainloop()
  • 方案2:直接调用绑定的处理函数
    如果你的处理函数没有依赖事件对象的属性(比如本例中select_combobox没有用到event参数的内容),可以在set()之后直接调用该函数,传入None作为占位参数即可:
gradations.set(1)
select_combobox(None)

内容的提问来源于stack exchange,提问作者Tao Zeng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:27:04