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
Post a Comment