Tkinter 教程 - 下拉選單

  1. Tkinter 下拉選單舉例
  2. Tkinter 下拉選單事件繫結
  3. Tkinter Combobox 只讀狀態

Tkinter 下拉選單-combobox 是使用者可用來選擇的下拉選單。它是 Entrydrop-down 控制元件的組合。當你單擊左側的箭頭時,你將看到一個顯示所有選項的下拉選單,如果單擊其中的一個,它將替換當前的 Entry 內容。

Tkinter 下拉選單舉例

Tkinter Combobox_Basic.py
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()

Tkinter Tutorial Combobox Basic

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() 方法是當使用者在下拉選單中選擇元素時將回撥函式與下拉選單虛擬事件繫結的方法。

Tkinter Combobox_Virtual Event Binding.py
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,則組合框顯示為灰色,如下所示。

Tkinter Combobox 狀態禁止只讀