Доступна ли функция автозаполнения поиска в поле со списком tkinter? - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть поле со списком tkinter, в котором находятся тысячи значений. Можно ли использовать функцию автозаполнения поиска?

Как если бы я что-то набрал в выпадающем списке, он должен выполнить поиск по шаблону и вызвать результаты.

            element_names = list(**a very big list**)
            dim_combo = ttk.Combobox(self, state='readonly')
            dim_combo['values'] = self.element_names
            dim_combo.place(x=100, y=100)

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

Вы можете попробовать как это

from tkinter import *
from tkinter import ttk

root = Tk()


def search():
    value_to_search = var.get()
    if value_to_search == "" or value_to_search == " ":
        dim_combo['values'] = element_names
    else:
        value_to_siplay = []
        for value in element_names:
            if value_to_search in value:
                value_to_siplay.append(value)
        dim_combo['values'] = value_to_siplay


element_names = list([str(a) for _ in range(100) for a in range(10)])

dim_combo = ttk.Combobox(root, state='readonly')
dim_combo['values'] = element_names
dim_combo.pack()

var=StringVar()
entry = Entry(root, textvariable=var)
entry.pack()

search_button = Button(root, text="search", command=search)
search_button.pack()

root.mainloop()

Функция "поиск" ищет внутри element_names в Combobox элементы, содержащие строку, которую вы хотите найти, поэтому если в поле мыиметь ["hello", "mahe", "pola"] и вы ищете he флажок будет отображать только ["hello", "mahe"]

0 голосов
/ 12 апреля 2019

Вы можете использовать метод AutocompleteCombobox из модуля tkentrycomplete. Приведенный ниже пример может вам помочь.

import tkinter as tk
from tkinter import tkentrycomplete

root = tk.Tk()
box_value = tk.StringVar()

def fun():
    print(box_value.get())
combo = tkentrycomplete.AutocompleteCombobox(textvariable=box_value)
test_list = ['apple', 'banana', 'cherry', 'grapes']
combo.set_completion_list(test_list)
combo.place(x=140, y=50)
button = tk.Button(text='but', command=fun)
button.place(x=140,y=70)

root.mainloop()

Вы можете найти модуль здесь ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...