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()