tkinter - Python GUI menu load another frame -


hallo devs, how change onclick frame page menu cascade? commented out:#, command=lambda: controller.show_frame(interface))

import tkinter tk import config.window_config conf pages.interface import interface pages.settings import settings   class network_tools(tk.tk):      def __init__(self, *args, **kwargs):          tk.tk.__init__(self, *args, **kwargs)         container = tk.frame(self)          self.title(conf.title)         self.geometry(conf.geometry)          # menu         menubar = tk.menu(self)          # menu pattern         #** here problem **         interface = tk.menu(menubar, tearoff=0)#, command=lambda: controller.show_frame(interface))         settings = tk.menu(menubar, tearoff=0)#, command=lambda: controller.show_frame(settings))          menubar.add_cascade(label="interface", menu=interface)         menubar.add_cascade(label="settings", menu=settings)         self.config(menu=menubar)          container.pack(side="top", fill="both", expand = true)         container.grid_rowconfigure(0, weight=1)         container.grid_columnconfigure(0, weight=1)          #** frames loading **         self.frames = {}          f in (interface, settings):             frame = f(container, self)             self.frames[f] = frame             frame.grid(row=0, column=0, stick="nsew")          # default upstart frame         self.show_frame(interface)      def show_frame(self, cont):         frame = self.frames[cont]         frame.tkraise()  app = network_tools() app.mainloop() 

the cascade menu pattern should below :

this example defines 2 menus access interface in 1 , settings in other :

menubar = tk.menu(self)  interface = tk.menu(menubar, tearoff=0)  settings = tk.menu(menubar, tearoff=0)  interface.add_command(label="interface", command=lambda: self.show_frame(interface)) menubar.add_cascade(label='interface', menu=interface)  settings.add_command(label="settings", command=lambda: self.show_frame(settings)) menubar.add_cascade(label='settings', menu=settings) self.config(menu=menubar) 

and example uses 1 menu gathers 2 frames :

menubar = tk.menu(self)  # menu pattern  screens = tk.menu(menubar, tearoff=0)   screens.add_command(label="interface", command=lambda: self.show_frame(interface)) screens.add_command(label="settings", command=lambda: self.show_frame(settings)) menubar.add_cascade(label='screens', menu=screens)  self.config(menu=menubar) 

Comments