Мне было интересно, можно ли создать панель поиска с каскадной функциональностью, используя виджет ввода в tkinter, или есть ли другие виджеты, которые можно использовать для достижения этой цели, за все время разработки настольных приложений я смог только чтобы создать тот, где вам нужно будет ввести полное имя того, что вы хотите найти, затем вы должны написать запрос, который получает запись и получает любую информацию, которую вы хотите из базы данных, это очень важно для меня, потому что это ограничивает меня, особенно когда я хочу создать приложение для магазина, где есть много предметов, вы можете просто ввести первую букву предмета, и он автоматически покажет вам предметы с этой первой буквой. пожалуйста, я был бы очень признателен, если бы был ответ на это...
Создание панели поиска с каскадной функциональностью с помощью Python
Ответы (1)
Все, что вам нужно сделать, это привязать функцию к <Any-KeyRelease>
для фильтрации данных по мере ввода пользователем. Когда связанная функция вызывается, получите значение виджета ввода, а затем используйте его, чтобы получить отфильтрованный список значений.
Вот пример, в котором используется фиксированный набор данных и список для отображения данных, но, конечно, вы можете так же легко выполнить запрос к базе данных и отобразить значения по своему усмотрению.
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()
person
Bryan Oakley
schedule
15.08.2019
AutocompleteCombobox
в модуле ttkwidget делает то, что вам нужно. - person j_4321   schedule 15.08.2019