【问题标题】:Tkinter add menu bar in FramesTkinter 在 Frames 中添加菜单栏
【发布时间】:2016-10-03 21:57:50
【问题描述】:

我使用的是Switch between two frames in tkinterSwitch between two frames in 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)`

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

【问题讨论】:

  • 这不违背菜单栏的正常使用吗?
  • 并且每次调用该示例中的 show_frame 方法时只需更改菜单栏,如果您有不同菜单的映射,它可能就像 self.config(menu=self.menus[page_name]) 一样简单
  • 您是如何创建菜单的?谁是他们的父母,是适当的框架还是根窗口形式?也许你应该提供一些示例代码。

标签: python python-2.7 tkinter


【解决方案1】:

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

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

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

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)

【讨论】:

  • 好的,我现在明白了。谢谢。
  • 你的例子真的很好。这正是我需要的,谢谢
猜你喜欢
  • 2023-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-24
  • 1970-01-01
  • 1970-01-01
  • 2022-01-27
  • 1970-01-01
相关资源
最近更新 更多