如何在Tkinter中创建具有自动完成的组合框?
Tkinter Combobox widget是在应用程序中实现下拉菜单的有用工具之一。它在顶部使用Entry widget和ListBox widget的组合。我们可以通过在Entry字段中键入项名称(如果它存在于Menu List中)来选取菜单项。但是,有时候,可能需要使用自动完成来选择菜单项。
为了创建自动完成Combobox,我们首先会创建一个Listbox以列出菜单,以及一个Entry widget来显示所选菜单。您可以将“Keyrelease”事件与entry widget绑定以在列表中搜索特定关键字。如果该项存在,我们将更新Listbox widget。
例子
在此示例中,我们将创建两个函数,如下所示,
- 函数 check(e) 将查找输入项是否存在于列表中。如果该项与输入的关键字匹配,我们将通过插入特定数据更新Entry widget。
- 函数 update(data) 将通过在Entry widget中插入值来更新Entry box。
#导入所需的库
from tkinter import*
from tkinter import ttk
#创建tkinter框架或窗口实例
win = Tk()
#设置窗口大小
win.geometry("700x350")
#设置窗口标题
win.title("Combobox- TutorialsPoint")
#使用list更新Entry widget中的选定项
def check(e):
v = entry.get()
if v == '':
data = values
else:
data = []
for item in values:
if v.lower() in item.lower():
data.append(item)
update(data)
#通过插入Entry widget中的值来更新Combobox
def update(data):
#清除Combobox
menu.delete(0, END)
#在Combobox中添加值
for value in data:
menu.insert(END,value)
#添加标签widget
label = Label(win, text = "Demo Combobox Widget", font = ('Helvetica 15 bold'), background = "green3")
label.pack(padx = 10, pady = 25)
#添加底部标签
text = Label(win, text="Select a Programming Language")
text.pack(padx=15, pady=20)
#创建一个Entry widget
entry = Entry(win, width=35)
entry.pack()
entry.bind('<KeyRelease>',check)
#创建Listbox widget以显示所有项列表
menu = Listbox(win)
menu.pack()
#创建所有菜单项的列表
values = ['Python', 'C ++', 'Java', 'Ruby on Rails', 'Rust', 'GoLang', 'Objective-C', 'C#', 'PHP', 'Swift', 'JavaScript']
#向combobox添加值
update(values)
#绑定combobox onclick
win.mainloop()
输出
运行以上Python脚本将显示一个带有Entry widget和ListBox的窗口。每当我们输入关键字时,它将更新ListBox widget,显示与输入的关键字匹配的结果。