如何在ttk.Combobox输入时从预设列表获取匹配联想建议?
ttk.Combobox 输入联想功能实现方案
实现步骤
- 给Combobox添加
state="normal"参数,设置为可编辑状态 - 绑定
<KeyRelease>键盘释放事件,替代你找不到的onchange事件,实时响应用户输入 - 每次输入后根据输入内容过滤预设候选列表,更新Combobox的下拉选项
完整可运行代码
from tkinter import Tk, ttk root = Tk() w, h = root.winfo_screenwidth(), root.winfo_screenheight() root.geometry("%dx%d+0+0" % (w, h)) # 预设候选列表 lst = ["tip1","oop","ool2","oll3","tip2","ool1","some","tip3","ool","oop"] # state="normal" 开启可编辑状态 t = ttk.Combobox(root, values=lst, state="normal") t.grid(row=0, column=0,sticky="w",padx=2,pady=2) # 输入过滤逻辑 def filter_options(event): input_str = t.get().strip() # 空输入展示全部候选 if not input_str: t["values"] = lst return # 忽略大小写模糊匹配,可根据需求修改为前缀匹配等规则 matched = [item for item in lst if input_str.lower() in item.lower()] t["values"] = matched # 可选:自动弹出下拉框展示候选,无需手动点击箭头 t.event_generate("<Down>") # 绑定键盘释放事件,每次输入结束后触发过滤 t.bind("<KeyRelease>", filter_options) if __name__ == "__main__": root.mainloop()
自定义调整说明
- 匹配规则修改:如果需要前缀匹配(仅匹配输入内容开头的候选),将过滤条件改为
item.lower().startswith(input_str.lower())即可 - 不需要自动弹出下拉框的话,删除
t.event_generate("<Down>")这一行即可 - 不需要忽略大小写的话,去掉
.lower()调用即可
内容的提问来源于stack exchange,提问作者frepynow
相关产品推荐
相关产品推荐

