5,980
社区成员
发帖
与我相关
我的任务
分享
需求:想用tkinter的Combobox实现一个支持模糊查询的下拉框,用户在输入内容时能够同步模糊匹配下拉选项
问题描述:现有代码在输入内容后,需要再点击下拉框按钮才能展示选项列表。
试过Listbox组件来组合实现,但有多个frame时该组件显示会有问题,且本就有下拉列表再多个Listbox列表画蛇添足了。
想要结果:用户输入内容时保持下拉列表展开状态,同时下拉列表能根据输入内容实时更新展示模糊匹配的选项(如下图效果)。
有没有兴趣的朋友帮忙修改下代码,谢谢。
import tkinter as tk
from tkinter import ttk
class test_combobox():
def on_key_release(self, event):
# 获取用户输入
input_text = self.combobox.get()
input_text_lower = input_text.lower()
# 根据用户输入更新下拉选项
self.combobox['values'] = [option for option in self.all_options_list
if input_text_lower in option.lower()]
# 如果输入为空,显示所有选项
if not input_text:
self.combobox['values'] = self.all_options_list
self.combobox.event_generate('<Up>')
def win_main(self):
self.all_options_list = ["1苹果", "111桔子", "2香蕉", "3梨子", "4西瓜", "5葡萄", "6猕猴桃", "7菠萝", "8火龙果"]
# 创建主窗口
root = tk.Tk()
root.geometry("300x100")
frame1 = tk.Frame(root)
frame1.pack(pady=5, anchor='w')
# 通道标签
_label = tk.Label(frame1, text="模糊查询下拉框:")
_label.pack(side=tk.LEFT)
# 通道下拉框
self.combobox = ttk.Combobox(frame1, values=self.all_options_list)
self.combobox.pack(side=tk.LEFT)
# 绑定键盘事件
self.combobox.bind('<KeyRelease>', self.on_key_release)
root.mainloop()
if __name__ == '__main__':
tc=test_combobox()
tc.win_main()