如何在 Tkinter 中创建下拉菜单

Jinku Hu 2024年2月15日
  1. Tkinter OptionMenu 示例
  2. 将值更改时的命令绑定到 OptionMenu
如何在 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

作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 创始人。Jinku 在机器人和汽车行业工作了8多年。他在自动测试、远程测试及从耐久性测试中创建报告时磨练了自己的编程技能。他拥有电气/电子工程背景,但他也扩展了自己的兴趣到嵌入式电子、嵌入式编程以及前端和后端编程。

LinkedIn Facebook