Tkinter OptionMenu 命令可以指定参数吗?
Tkinter OptionMenu Command Possible to Specify Parameters?
目前是 Tkinter 的新手,在研究时我发现关于 Tkinter 的 OptionMenu 小部件的文档很少。我希望能够对多个菜单使用一个回调函数,但我不知道该怎么做。
目前,我的代码是这样的:
root = tk.Tk()
options = ["Option A", "Option B"]
message = "Nothing selected!"
def optionsCallback(selection):
message.set(selection)
#more code here
optionsMenu = ttk.OptionMenu(root, tk.StringVar(),
"Select an option",*options,
command = optionsCallback).pack()
optionsLbl = ttk.Label(root, textvariable = message).pack()
是否可以指定一个附加参数,以便回调函数能够破译调用它的是哪个 OptionMenu?
像这样:
root = tk.Tk()
message = "Nothing selected!"
options = ["Option A", "Option B"]
def optionsCallback(selection, menu):
if menu == 'A':
message.set("this is menu A, " + selection)
if menu == 'B':
message.set("this is menu B, " + selection)
optionsMenuA = ttk.OptionMenu(root, tk.StringVar(),
"Select an option",*options,
command = optionsCallback).pack() #how to specify?
optionsMenuB = ttk.OptionMenu(root, tk.StringVar(),
"Select an option",*options,
command = optionsCallback).pack() #how to specify?
optionsLbl = ttk.Label(root, textvariable = message).pack()
您可以使用 lambda
:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
message = tk.StringVar(value="Nothing selected!")
options = ["Option A", "Option B"]
def optionsCallback(selection, menu):
if menu == 'A':
message.set("this is menu A, " + selection)
if menu == 'B':
message.set("this is menu B, " + selection)
optionsMenuA = ttk.OptionMenu(root, tk.StringVar(),
"Select an option", *options,
command=lambda x: optionsCallback(x, "A")).pack()
optionsMenuB = ttk.OptionMenu(root, tk.StringVar(),
"Select an option", *options,
command=lambda x: optionsCallback(x, "B")).pack()
optionsLbl = ttk.Label(root, textvariable = message).pack()
root.mainloop()
请注意,message
已从普通字符串更改为 StringVar()
。
目前是 Tkinter 的新手,在研究时我发现关于 Tkinter 的 OptionMenu 小部件的文档很少。我希望能够对多个菜单使用一个回调函数,但我不知道该怎么做。
目前,我的代码是这样的:
root = tk.Tk()
options = ["Option A", "Option B"]
message = "Nothing selected!"
def optionsCallback(selection):
message.set(selection)
#more code here
optionsMenu = ttk.OptionMenu(root, tk.StringVar(),
"Select an option",*options,
command = optionsCallback).pack()
optionsLbl = ttk.Label(root, textvariable = message).pack()
是否可以指定一个附加参数,以便回调函数能够破译调用它的是哪个 OptionMenu?
像这样:
root = tk.Tk()
message = "Nothing selected!"
options = ["Option A", "Option B"]
def optionsCallback(selection, menu):
if menu == 'A':
message.set("this is menu A, " + selection)
if menu == 'B':
message.set("this is menu B, " + selection)
optionsMenuA = ttk.OptionMenu(root, tk.StringVar(),
"Select an option",*options,
command = optionsCallback).pack() #how to specify?
optionsMenuB = ttk.OptionMenu(root, tk.StringVar(),
"Select an option",*options,
command = optionsCallback).pack() #how to specify?
optionsLbl = ttk.Label(root, textvariable = message).pack()
您可以使用 lambda
:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
message = tk.StringVar(value="Nothing selected!")
options = ["Option A", "Option B"]
def optionsCallback(selection, menu):
if menu == 'A':
message.set("this is menu A, " + selection)
if menu == 'B':
message.set("this is menu B, " + selection)
optionsMenuA = ttk.OptionMenu(root, tk.StringVar(),
"Select an option", *options,
command=lambda x: optionsCallback(x, "A")).pack()
optionsMenuB = ttk.OptionMenu(root, tk.StringVar(),
"Select an option", *options,
command=lambda x: optionsCallback(x, "B")).pack()
optionsLbl = ttk.Label(root, textvariable = message).pack()
root.mainloop()
请注意,message
已从普通字符串更改为 StringVar()
。