Tkinter 教程 - 下拉選單
Jinku Hu
2023年1月30日
Tkinter 下拉選單-combobox
是使用者可用來選擇的下拉選單。它是 Entry
和 drop-down
控制元件的組合。當你單擊左側的箭頭時,你將看到一個顯示所有選項的下拉選單,如果單擊其中的一個,它將替換當前的 Entry
內容。
Tkinter 下拉選單舉例
import tkinter as tk
app = tk.Tk()
app.geometry("200x100")
labelTop = tk.Label(app, text="Choose your favourite month")
labelTop.grid(column=0, row=0)
comboExample = ttk.Combobox(app, values=["January", "February", "March", "April"])
pprint(dict(comboExample))
comboExample.grid(column=0, row=1)
comboExample.current(1)
print(comboExample.current(), comboExample.get())
app.mainloop()
from tkinter import ttk
Tkinter 下拉選單控制元件位於 Tkinter 的 ttk
模組中,因此,你需要匯入此模組才能使用此控制元件。
comboExample = ttk.Combobox(app, values=["January", "February", "March", "April"])
它會建立了 Tkinter 下拉選單控制元件例項,並分配將顯示在下拉選單中的值。
comboExample.current(1)
通常,下拉選單中顯示的預設項是值列表中的第一個元素。你還可以使用 current(index)
方法將其更改為任何元素。
print(comboExample.current(), comboExample.get())
你還可以使用 current()
來獲取當前所選元素的索引,並使用 get()
方法來獲取元素本身。
Tkinter 下拉選單事件繫結
下拉選單回撥函式繫結與前幾章介紹的控制元件不同。bind()
方法是當使用者在下拉選單中選擇元素時將回撥函式與下拉選單虛擬事件繫結的方法。
import tkinter as tk
def callbackFunc(event):
print("New Element Selected")
app = tk.Tk()
app.geometry("200x100")
labelTop = tk.Label(app, text="Choose your favourite month")
labelTop.grid(column=0, row=0)
comboExample = ttk.Combobox(app, values=["January", "February", "March", "April"])
comboExample.grid(column=0, row=1)
comboExample.current(1)
comboExample.bind("<<ComboboxSelected>>", callbackFunc)
app.mainloop()
def callbackFunc(event):
print("New Element Selected")
無論你何時從列表中選擇元素,它都會呼叫該回撥函式。
Note
event
作為傳遞引數不應該被跳過,它是從下拉框虛擬事件中傳遞過來的。comboExample.bind("<<ComboboxSelected>>", callbackFunc)
它將虛擬事件"« ComboboxSelected »“與回撥函式繫結在一起。
每次從列表中選擇一個新元素時,它都會列印出 New Element Selected
Tkinter Combobox 只讀狀態
上面的所有示例程式碼中的組合框元素的內容是可編輯的,因為 state
預設設定是 normal
,該狀態下的文字欄位是可以直接編輯的。
Tkinter 組合框 Combobox 的狀態除了 normal
外還有下面兩種狀態,
readonly
-文字欄位不可編輯,使用者只能從下拉選單中選擇值。disabled
-組合框顯示為灰色,無法進行互動。
import tkinter as tk
from tkinter import ttk
app = tk.Tk()
app.geometry("200x100")
labelTop = tk.Label(app, text="Choose your favourite month")
labelTop.grid(column=0, row=0)
comboExample = ttk.Combobox(
app, values=["January", "February", "March", "April"], state="readonly"
)
comboExample.grid(column=0, row=1)
comboExample.current(0)
print(comboExample.current(), comboExample.get())
app.mainloop()
上面的示例將 Tkinter 組合框設定為只讀。
如果將狀態從 readonly
更改為 disabled
,則組合框顯示為灰色,如下所示。