如何在 Tkinter 中建立下拉選單

  1. Tkinter OptionMenu 示例
  2. 將值更改時的命令繫結到 OptionMenu

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