Sep-19-2019, 01:38 AM
Hi,
I try to make an application, which has multiple frames. Each frame should get a menu.
I found 2 piece of codes, but I couldn't figure out how to combine them:
Multiple Frames:
I try to make an application, which has multiple frames. Each frame should get a menu.
I found 2 piece of codes, but I couldn't figure out how to combine them:
Multiple Frames:
import tkinter as tk from tkinter import font as tkfont class SampleApp(tk.Tk): def __init__(self, *args, **kwargs): tk.Tk.__init__(self, *args, **kwargs) self.title_font = tkfont.Font(family='Helvetica', size=18, weight="bold", slant="italic") # the container is where we'll stack a bunch of frames # on top of each other, then the one we want visible # will be raised above the others 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 = {} for F in (StartPage, PageOne, PageTwo): page_name = F.__name__ frame = F(parent=container, controller=self) self.frames[page_name] = frame # put all of the pages in the same location; # the one on the top of the stacking order # will be the one that is visible. frame.grid(row=0, column=0, sticky="nsew") self.show_frame("StartPage") def show_frame(self, page_name): '''Show a frame for the given page name''' frame = self.frames[page_name] frame.tkraise() class StartPage(tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self, parent) self.controller = controller label = tk.Label(self, text="This is the start page", font=controller.title_font) label.pack(side="top", fill="x", pady=10) button1 = tk.Button(self, text="Go to Page One", command=lambda: controller.show_frame("PageOne")) button2 = tk.Button(self, text="Go to Page Two", command=lambda: controller.show_frame("PageTwo")) button1.pack() button2.pack() class PageOne(tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self, parent) self.controller = controller label = tk.Label(self, text="This is page 1", font=controller.title_font) label.pack(side="top", fill="x", pady=10) button = tk.Button(self, text="Go to the start page", command=lambda: controller.show_frame("StartPage")) button.pack() class PageTwo(tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self, parent) self.controller = controller label = tk.Label(self, text="This is page 2", font=controller.title_font) label.pack(side="top", fill="x", pady=10) button = tk.Button(self, text="Go to the start page", command=lambda: controller.show_frame("StartPage")) button.pack() if __name__ == "__main__": app = SampleApp() app.mainloop()and the menu code:
import tkinter as tk from tkinter import ttk from tkinter import scrolledtext def exit_qk(): obj.quit() obj.destroy() exit() # obj of Tkinter obj = tk.Tk() obj.geometry("500x200+50+50") obj.resizable(0, 0) # switch off resizable # create menu bar menu_bar = tk.Menu(obj) obj.config(menu=menu_bar) # add item to menu bar file_menu = tk.Menu(menu_bar, tearoff=0) # create file menu # add file-menu to menu bar with label menu_bar.add_cascade(label="File", menu=file_menu) # add commands to File menu file_menu.add_command(label="New") # add new to file menu file_menu.add_command(label="Open") file_menu.add_command(label="Save") file_menu.add_separator() file_menu.add_command(label="Exit", command=exit_qk) help_menu = tk.Menu(menu_bar, tearoff=0) # create help menu # add help-menu to menu bar with label menu_bar.add_cascade(label="Help", menu=help_menu) # add commands to File menu help_menu.add_command(label="Help") # add new to help menu help_menu.add_separator() help_menu.add_command(label="Credits") # add new to help menu help_menu.add_command(label="About") obj.mainloop()I would appreciate your hints.