Python 3.7 Tkinter 8-快速更改菜单项的“命令”选项

我正在创建一个tkinter应用程序,并尝试实现模型视图控制器模式。

我有一个View类:

class View(Frame):
    def __init__(self,master):
        """ Set up and display the user interface """
        Frame.__init__(self,master)
        self.menubar = Menu(master)
        self.menubar.add_command(label="Login")
        self.menubar.add_command(label="Register")
        self.menubar.add_command(label="Exit",command=master.quit)
        self.master = master
        self.master.config(menu=self.menubar)

在我的控制器中,我想像这样设置菜单栏项目“登录”的“命令”选项(因为我不希望我的视图处理登录逻辑):

class Controller:
    def __init__(self):
        self.root = Tk()
        self.model = Model()
        self.view = View(self.root)

---> self.view.menubar [设置“登录”项的命令= self.test()] self.view.menubar.entryconfigure(0,command=self.test)但没有运气。

    def run(self):
        self.root.title("Password Manager Application")
        self.root.mainloop()

    def test(self):
        print("Asdf")

感谢您的帮助, 马克

sunnisha 回答:Python 3.7 Tkinter 8-快速更改菜单项的“命令”选项

更新: 您实际上可以尝试使用entryconfig(1,command=new_cmd)

您可以执行的另一种方法是在命令功能中进行这些更改并将其放置在控制器代码中。

一个例子

def login_cmd(self):
    if self.login_cmd_option == 'A':
        self.login_A()
    else:
        self.login_B()

def set_login_cmd(login_cmd_option):
    self.login_cmd_option = login_cmd_option
,

正确的解决方案是使用itemconfigure。但是,项目零可能不是您认为的项目。如果您没有将tearoff设置为False,则零项目可能是可撕项目。

您可以使用项目的标签代替索引号,以确保更改了正确的项目(假设标签不变)。

示例:

self.view.menubar.entryconfigure("Login",command=self.test)
本文链接:https://www.f2er.com/3127647.html

大家都在问