tkinter实现模糊查询下拉框的问题?

胖玻璃球就一个 2024-10-03 10:17:24

需求:想用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()

 

...全文
121 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

5,980

社区成员

发帖
与我相关
我的任务
社区描述
人生苦短,我用python
社区管理员
  • Python 学习者
  • 嗨学编程
  • 松鼠爱吃饼干
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

欢迎来到Python学习者们的社区,

 

本社区分享你需要的文章、问题解答、技术互助、学习资源、面试系列等等

 

欢迎你的加入,祝你学有所成~

试试用AI创作助手写篇文章吧