tkinter组合框中是否提供自动完成搜索功能?

时间:2019-04-12 10:34:10

标签: python python-3.x tkinter

我有一个tkinter组合框,其中有1000个值。可以使用自动完成搜索功能吗?

就像我在组合框中键入内容一样,它应该执行一些通配符搜索并显示结果。

class ProjectAdmin(admin.ModelAdmin):
    form = ProjectAdminForm

4 个答案:

答案 0 :(得分:1)

您可以这样尝试

const StyledNavbar = styled(Navbar);
export { StyledNavbar as Navbar };

函数“搜索”在组合框的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且您搜索{{1 }}复选框仅显示["hello", "mahe", "pola"]

答案 1 :(得分:1)

这是一个很好的解决方案:)

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 :(得分:0)

您可以使用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()

您可以在link

中找到该模块

答案 3 :(得分:0)

我正在使用tk.OptionMenu()小部件在我的代码中实现ComboBox下拉菜单。

使用此小部件,我发现如果在其旁边还包括一个tk.Entry()小部件,并且两个小部件共享相同的textVariable,则tkinter会自动在下拉列表中用作自动搜索。

这是一个简短的片段

selectedItemText = tk.StringVar()

aEntry = tk.Entry(self.master, kw_tkEntry)
aEntry['textvariable'] = selectedItemText

aComboBox = tk.OptionMenu(self.master, selectedItemText, *set(largeDataList))

希望这对某人有帮助