使用Python创建具有级联功能的搜索栏

2024-06-18 16:16:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在想,是否可以使用tkinter中的entry小部件创建一个具有级联功能的搜索栏,或者是否可以使用其他小部件来实现这个目标,在桌面应用程序开发的整个过程中,我只能创建一个,你必须输入你想要搜索的内容的全名,然后你就可以编写一个查询,从数据库中获取你想要的信息,这对我来说非常重要,因为它限制了我,特别是当我想为一个商店创建一个应用程序时,那里有很多商品,你只需键入商品的第一个字母,它就会自动显示带有第一个字母的商品。如果有答案的话我会非常感激


Tags: 功能信息数据库应用程序内容目标部件tkinter
1条回答
网友
1楼 · 发布于 2024-06-18 16:16:41

您所需要做的就是在<Any-KeyRelease>上绑定一个函数,以便在用户键入时过滤数据。当调用绑定函数时,获取entry小部件的值,然后使用该值来获取值的过滤列表

下面是一个使用一组固定数据和一个列表框来显示数据的示例,当然,您也可以轻松地执行数据库查询并按自己的意愿显示值

import tkinter as tk

# A list of all tkinter widget class names
VALUES = [cls.__name__ for cls in tk.Widget.__subclasses__()]

class Example():
    def __init__(self):
        self.root = tk.Tk()
        self.entry = tk.Entry(self.root)
        self.listbox = tk.Listbox(self.root)
        self.vsb = tk.Scrollbar(self.root, command=self.listbox.yview)
        self.listbox.configure(yscrollcommand=self.vsb.set)

        self.entry.pack(side="top", fill="x")
        self.vsb.pack(side="right", fill="y")
        self.listbox.pack(side="bottom", fill="both", expand=True)

        self.entry.bind("<Any-KeyRelease>", self.filter)

        self.filter()

    def filter(self, event=None):
        pattern = self.entry.get().lower()
        self.listbox.delete(0, "end")
        filtered = [value for value in VALUES if value.lower().startswith(pattern)]
        self.listbox.insert("end", *filtered)

example = Example()
tk.mainloop()

相关问题 更多 >