Tkinter,在新窗口中添加菜单选项

问题描述:

所以我很困惑如何将菜单选项添加到我的窗口中......我清楚地可以制作菜单栏,并知道如何做到这一点,就像您可以在我的代码中看到的一样。然而,我从一个窗口改变到另一个窗口的方式会影响事物,因为我只有1个Tk.tk窗口。该程序的其余部分在该窗口内运行。我希望能够更改每个窗口的标题和菜单。Tkinter,在新窗口中添加菜单选项

class start(tk.Tk): 

    def __init__(self, *args, **kwargs): 

     tk.Tk.__init__(self, *args, **kwargs) 

     container = tk.Frame(self) 
     container.pack(side="top", fill="both", expand = True) 
     container.grid_rowconfigure(0, weight=1) 
     container.grid_columnconfigure(0, weight=1) 

     self.frames = {} 

     tk.Tk.title(self, "Group Registration") 

     menubar = tk.Menu(container) 
     tk.Tk.config(self, menu=menubar) 
     fileMenu = tk.Menu(menubar, tearoff=0) 
     menubar.add_cascade(label="File", menu=fileMenu) 
     fileMenu.add_command(label="Exit", command=quit) 

     for F in (begin, admin_main, members): 

      frame = F(container, self) 

      self.frames[F] = frame 

      frame.grid(row=0, column=0, sticky="nsew") 

     self.show_frame(begin) 

    def show_frame(self, cont): 

     frame = self.frames[cont] 
     frame.tkraise() 
     frame.event_generate("<<showframe>>") 


class begin(tk.Frame): 
    pass 

class admin_main(tk.Frame): 

    def __init__(self, parent, controller): 

     self.bind("<<showframe>>", self.on_show_frame) 

    def on_show_frame(self, event): 

     menubar = Menu(self) 
     fileMenu = Menu(menubar) 
     menubar.add_cascade(label="File", menu=fileMenu) 
     fileMenu.add_command(label="Create member list")#command=) 
     fileMenu.add_command(label="Load member list")#command=) 
     fileMenu.add_command(label="Email")#command=) 
     fileMenu.add_separator() 
     fileMenu.add_command(label="Exit") 

     print"ok" 


class members(tk.Frame): 
    pass 

app = start() 
app.geometry("600x400") 
app.mainloop() 

这些类是我的新窗口。这只是短版本的代码,以显示窗口如何操作...

(修订版) 解释器将打印页面打开时“确定”。没有修改过的语法,但是,我没有新的菜单栏显示。

+0

你看了下面的内容吗? https://stackoverflow.com/questions/35029188/how-would-i-make-a-method-which-is-run-every-time-a-frame-is-shown-in-tkinter –

+0

我现在有大声笑...我没有使用event_generate之前,但从我在谷歌上阅读我可以做的事情,如或类似的东西。我不明白如何使用它来添加到我的菜单。我会在event_generate()中添加代码,或者像示例所示那样绑定它,并在def on_show_frame()中添加代码。 – ricky6991

+0

您不要将事件添加到菜单中。你使用even来调用一个创建菜单的函数。您在上面的代码中使用菜单的方式,只有在页面出现时调用的函数中执行该菜单,而不是在创建页面的代码中执行。 –

你非常接近(除了所有在你的问题的代码中的错误的...)

但是,假设你可以修复所有的错误,你就错过了唯一的一块是实际配置主窗口以使用您创建的菜单栏。

您需要添加几行来告诉窗口有关菜单栏。你可以通过调用winfo_toplevel()来获得窗口,然后你可以配置该窗口小部件的菜单:

def on_show_frame(self, event): 
    menubar = tk.Menu(...) 
    ... 
    top = self.winfo_toplevel() 
    top.configure(menu=menubar) 
+0

真棒,这工作很好...我要查找winfo_toplevel(),看看有什么需要。我正在学习一吨。我试图做tk.configure,它不会工作,所以我知道我错过了一些东西。另外,我的问题中的代码只是给你一个我如何设置我的类,我的实际代码我充分运作的例子。谢谢,因为对我有耐心! – ricky6991