【问题标题】:How can I make the menubutton in tkinter perform specific function when clicked单击时如何使tkinter中的菜单按钮执行特定功能
【发布时间】:2019-04-20 22:22:45
【问题描述】:

我复制了这段代码

from Tkinter import * import tkMessageBox import Tkinter

top = Tk()

mb= Menubutton ( top, text="condiments", relief=RAISED ) mb.grid() mb.menu = Menu ( mb, tearoff = 0 ) mb["menu"] = mb.menu

mayoVar = IntVar() ketchVar = IntVar()

mb.menu.add_checkbutton ( label="mayo", variable=mayoVar ) mb.menu.add_checkbutton ( label="ketchup", variable=ketchVar )

mb.pack() top.mainloop()

当有人点击蛋黄酱时..我希望它执行特定的功能

【问题讨论】:

    标签: python-3.x python-2.7 tkinter


    【解决方案1】:

    使用回调函数来实现你想要做的事情,然后从菜单项中调用它:

    def callback_function():
        # Your code here
    
    mb.menu.add_checkbutton(label="mayo", variable=mayoVar,
                            command=callback_function)
    

    要获取有关检查按钮状态的信息,您需要将状态保存到变量中。这是一个示例,说明如何通过创建将变量保存在按钮名称下的 dict 来做到这一点:

    import tkinter as tk
    
    root = tk.Tk()
    root.geometry('300x200')
    
    def show_name_details(name):
        print(f'show_name_details: {name}, is {name_dict[name].get()}')
    
    mb = tk.Menubutton(root, text="condiments", relief='raised')
    mb.grid()
    mb.menu = tk.Menu(mb, tearoff=0)
    mb["menu"] = mb.menu
    
    name_dict = {'Mayo': tk.IntVar(), 'Ketchup': tk.IntVar()}
    for name, var in name_dict.items():
        mb.menu.add_checkbutton(label=name, variable=name_dict[name],
                                command=lambda n=name:show_name_details(n))
    
    root.mainloop()
    

    【讨论】:

    • 你好,我们可以动态地向菜单添加更多的检查按钮并将不同的字符串传递给一个函数吗?我试图通过,但它只显示其中的最后一个变量。对于 name_dict.keys() 中的名称:mb.menu.add_checkbutton(label=name, variable=name, command=show_name_details)
    • 这是一个常见问题。变量 name 将在 for 循环中保留分配给它的最后一个值。要在循环期间保持分配的值,您可以使用具有默认值的 lambda:command=lambda n=name:show_name_details(n)
    • 你好@figbeam 如果我想发送信息是否选择了该项目,那么检查按钮将如何?
    • 添加了新的解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    相关资源
    最近更新 更多