如何在 Tkinter 中建立下拉選單

Tkinter 中建立下拉選單有幾種方法。

  1. 使用在 Tkinter 組合框教程中介紹的組合框
  2. 使用 OptionMenu 控制元件.

OptionMenu 同組合框控制元件有些類似,但它是 Tkinter 本身的一個模組,因此你不用跟呼叫 Combobox 那樣需要呼叫 ttk

Tkinter OptionMenu 示例

import tkinter as tk

OptionList = [
"Aries",
"Taurus",
"Gemini",
"Cancer"
] 

app = tk.Tk()

app.geometry('100x200')

variable = tk.StringVar(app)
variable.set(OptionList[0])

opt = tk.OptionMenu(app, variable, *OptionList)
opt.config(width=90, font=('Helvetica', 12))
opt.pack()

app.mainloop()
opt = tk.OptionMenu(app, variable, *OptionList)

app 是建立的選項選單的父級,

variabletk.StringVar 型別的初始文字變數。

*OptionList 是選單的其他選項。* 是用於資料容器的 unpack,在此處是指 list

Tkinter OptionMenu Example

將值更改時的命令繫結到 OptionMenu

OptionMenu 從選項列表中選擇新值時,無法連線對應的命令。你不能像按鈕控制元件那樣簡單地繫結回撥函式。

tk.Button(app, text="Increase", width=30, command=change_label_number)

你需要使用 trace 方法將 observer 回撥附加到 OptionMenu 變數。每當變數更改時,它都會觸發回撥函式。

OptionMenu 回撥函式舉例

import tkinter as tk

OptionList = [
"Aries",
"Taurus",
"Gemini",
"Cancer"
] 

app = tk.Tk()

app.geometry('100x200')

variable = tk.StringVar(app)
variable.set(OptionList[0])

opt = tk.OptionMenu(app, variable, *OptionList)
opt.config(width=90, font=('Helvetica', 12))
opt.pack(side="top")

labelTest = tk.Label(text="", font=('Helvetica', 12), fg='red')
labelTest.pack(side="top")

def callback(*args):
    labelTest.configure(text="The selected item is {}".format(variable.get()))

variable.trace("w", callback)

app.mainloop()

traceobserver 有三種模式,

observer 模式 解釋
w variable 被更改或選擇時
r variable 被讀取時
u variable 被刪除時

variable.trace("w", callback) 意味著當 variable 被使用者更改或選擇時它將呼叫 callback 函式。

Tkinter OptionMenu Callback

comments powered by Disqus