【问题标题】:Tkinter OptionMenu Command Possible to Specify Parameters?Tkinter OptionMenu 命令可以指定参数吗?
【发布时间】:2021-06-28 03:16:10
【问题描述】:

目前是 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()

【问题讨论】:

    标签: python tkinter optionmenu


    【解决方案1】:

    你可以使用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()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-26
      • 1970-01-01
      • 1970-01-01
      • 2012-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多