如何在调用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
相关产品推荐
相关产品推荐

