2017-06-06 58 views
0

所以我很困惑如何將菜單選項添加到我的窗口中......我清楚地可以製作菜單欄,並知道如何做到這一點,就像您可以在我的代碼中看到的一樣。然而,我從一個窗口改變到另一個窗口的方式會影響事物,因爲我只有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來調用一個創建菜單的函數。您在上面的代碼中使用菜單的方式,只有在頁面出現時調用的函數中執行該菜單,而不是在創建頁面的代碼中執行。 –

回答

0

你非常接近(除了所有在你的問題的代碼中的錯誤的...)

但是,假設你可以修復所有的錯誤,你就錯過了唯一的一塊是實際配置主窗口以使用您創建的菜單欄。

您需要添加幾行來告訴窗口有關菜單欄。你可以通過調用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