如何在 Tkinter 中建立帶有自動完成功能的組合框?


Tkinter Combobox 小部件是用於在應用程式中實現下拉選單的有用小部件之一。它在其頂部使用了 Entry 小部件和 ListBox 小部件的組合。我們可以透過在 Entry 欄位中鍵入專案名稱(如果它存在於選單列表中)來選擇選單項。但是,有時,可能存在需要使用自動完成功能來選擇選單項的情況。

為了建立一個自動完成功能的 Combobox,我們將首先建立一個 Listbox 來列出選單,以及一個 Entry 小部件來顯示所選選單。您可以將“Keyrelease”事件與 Entry 小部件繫結,以在列表中搜索特定關鍵字。如果該專案存在,我們將更新 Listbox 小部件。

示例

在這個示例中,我們將建立兩個函式,這樣:

  • 函式 **check(e)** 將查詢輸入的專案是否存在於列表中。如果該專案與輸入的關鍵字匹配,我們將透過插入特定資料來更新 Entry 小部件。
  • 函式 **update(data)** 將透過在 Entry 小部件中插入值來更新 Entry 框。
# Import the Required libraries
from tkinter import *
from tkinter import ttk

# Create an instance of tkinter frame or window
win= Tk()

# Set the size of the window
win.geometry("700x350")

# Set the title of the window
win.title("Combobox- TutorialsPoint")

# Update the Entry widget with the selected item in list
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)

def update(data):
   # Clear the Combobox
   menu.delete(0, END)
   # Add values to the combobox
   for value in data:
      menu.insert(END,value)


# Add a Label widget
label= Label(win, text= "Demo Combobox Widget", font= ('Helvetica 15
bold'), background= "green3")
label.pack(padx= 10, pady= 25)

# Add a Bottom Label
text= Label(win, text="Select a Programming Language")
text.pack(padx= 15,pady= 20)

# Create an Entry widget
entry= Entry(win, width= 35)
entry.pack()
entry.bind('<KeyRelease>',check)

# Create a Listbox widget to display the list of items
menu= Listbox(win)
menu.pack()

# Create a list of all the menu items
values= ['Python', 'C++', 'Java','Ruby on Rails', 'Rust',
'GoLang','Objective-C', 'C# ', 'PHP', 'Swift', 'JavaScript']

# Add values to our combobox
update(values)

# Binding the combobox onclick

win.mainloop()

輸出

執行上述 Python 指令碼將顯示一個帶有 Entry 小部件和 ListBox 的視窗。每當我們輸入一個關鍵字時,它將更新 ListBox 小部件,顯示與輸入關鍵字匹配的結果。

更新於:2021年6月7日

3K+ 瀏覽量

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.