Tkinter 在 Frames 中添加菜单栏

Eul*_*lar 4 python tkinter python-2.7

我正在使用 @Bryan Oakley在此处tkinter 中的两帧之间切换的答案中发布的代码。现在我想添加一些菜单栏。在 Pageone 中,我想添加菜单FileHelp 而在 Pagetwo 中,我想添加菜单Dataplot 但我无法完成。

我可以将菜单添加到主窗口。但是随后它可用于所有页面,并且在我更改页面时不会消失。我不想要那个。我想添加特定于该页面的菜单栏。我怎样才能做到这一点

编辑

实际上我想做的是,我正在制作一个 GUI,您可以在其中进行数学积分和矩阵计算等。因此,在打开 GUI 时,会出现带有积分、矩阵等按钮的窗口。单击这些按钮将打开一个窗口,您可以在其中进行相应的计算。我使用Toplevel()打开一个新窗口的命令来完成它,我只是隐藏了以前的。但我喜欢 Bryan 在该链接中发布的 GUI 代码,所以我询问了向单个页面添加菜单的问题。

在 Bryan 的代码中,我刚刚添加了这些行 `class SampleApp(tk.Tk):

def __init__(self, *args, **kwargs):
    tk.Tk.__init__(self, *args, **kwargs)
    menu=tk.Menu(self)
    self.config(menu=menu)
    subMenu=tk.Menu(menu)
    menu.add_cascade(label="File",menu=subMenu)`
Run Code Online (Sandbox Code Playgroud)

但正如我所说,它将菜单附加到主窗口。但我想要不同页面的不同菜单。

Bry*_*ley 5

最简单的解决方案是向每个页面添加一个为该页面创建菜单栏的方法,然后在切换框架时切换到该菜单。

这可能需要您为页面之间通用的所有菜单项(例如:编辑->剪切、编辑-复制、编辑-粘贴等)准备一堆重复的代码,但它至少显示了一般性技术。

例如,一个页面可能会定义这样的方法:

class PageOne(tk.Frame):
    ...
    def menubar(self, root):
        menubar = tk.Menu(root)
        pageMenu = tk.Menu(menubar)
        pageMenu.add_command(label="PageOne")
        menubar.add_cascade(label="PageOne", menu=pageMenu)
        return menubar
Run Code Online (Sandbox Code Playgroud)

然后在切换帧时调用此方法,如下所示:

def SampeApp(tk.Tk):
    ...
    def show_frame(self, page_name):
        '''Show a frame for the given page name'''
        frame = self.frames[page_name]
        frame.tkraise()

        menubar = frame.menubar(self)
        self.configure(menu=menubar)
Run Code Online (Sandbox Code Playgroud)