Tkinter在框架

时间:2016-06-03 18:19:11

标签: python python-2.7 tkinter

我使用的是在此处回复的代码Switch between two frames in tkinter 来自@Bryan Oakley。现在我想添加一些菜单栏。在Pageone中,我想添加菜单FileHelp,在Pagetwo中,我想添加菜单Dataplot 但我无法完成它。

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

修改

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

在布莱恩的代码中,我刚刚添加了这些代码 `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)`

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

1 个答案:

答案 0 :(得分:2)

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

这可能要求您为页面之间常见的所有菜单项设置一堆重复的代码(例如:edit-> cut,edit-copy,edit-paste等),但它在至少显示了一般技术。

例如,页面可能会定义如下方法:

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

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

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)