如何在Tkinter中创建具有自动完成的组合框?

如何在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,显示与输入的关键字匹配的结果。

如何在Tkinter中创建具有自动完成的组合框?

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程