Combobox с подсказкой вариантов в tkinter
Есть код, который выполняет поиск в списке по нажатию кнопки выпадающего списка.
Не могу понять, как мне обрабатывать это в прямом эфире, чтобы при вводе слов сразу показывались подходящие значения.
(без ООП, т.к. привязать ООП к своей утилите я не смогу).
Спасибо
from tkinter import *
from tkinter import ttk
lst = ['C', 'C++', 'Java',
'Python', 'Perl',
'PHP', 'ASP', 'JS']
def check_input(event):
value = event.widget.get()
if value == '':
combo_box['values'] = lst
else:
data = []
for item in lst:
if value.lower() in item.lower():
data.append(item)
combo_box['values'] = data
root = Tk()
# creating Combobox
combo_box = ttk.Combobox(root)
combo_box['values'] = lst
combo_box.bind('<KeyRelease>', check_input)
combo_box.pack()
root.mainloop()
Ответы (2 шт):
Автор решения: S. Nick
→ Ссылка
Попробуйте так:
from tkinter import *
from ttkwidgets.autocomplete import AutocompleteCombobox # pip install ttkwidgets
lst = [
'C', 'C++', 'Java',
'Python', 'Perl',
'PHP', 'ASP', 'JS'
]
root = Tk()
# creating Combobox
combo_box = AutocompleteCombobox(root, width=30, completevalues=lst)
combo_box.pack()
root.mainloop()
Автор решения: insolor
→ Ссылка
Пример с Entry + Listbox (без скрытия списка):
from tkinter import *
lst = [
'C', 'C++', 'Java',
'Python', 'Perl',
'PHP', 'ASP', 'JS'
]
def check_input(_event=None):
value = entry.get().lower()
if value == '':
listbox_values.set(lst)
else:
data = []
for item in lst:
if value.lower() in item.lower():
data.append(item)
listbox_values.set(data)
root = Tk()
entry_text = StringVar()
entry = Entry(root, textvariable=entry_text)
entry.bind('<KeyRelease>', check_input)
entry.pack()
def on_change_selection(event):
selection = event.widget.curselection()
if selection:
index = selection[0]
data = event.widget.get(index)
entry_text.set(data)
check_input()
listbox_values = Variable()
listbox = Listbox(root, listvariable=listbox_values)
listbox.bind('<<ListboxSelect>>', on_change_selection)
listbox.pack()
listbox_values.set(lst)
root.mainloop()
