Python Forum
[Tkinter] Menu in frame
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Tkinter] Menu in frame
#1
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:
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.
Reply
#2
We don't like to point to other forums as a rule, but this one is worthy for your question:
https://stackoverflow.com/questions/4834...pplication
Reply
#3
Do not know why if I came to this forum and someone pointed me to an answer that happened to exit on another forum -- I am sure to come back to this forum in the future -- its just a win-win scenario
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  [Tkinter] Scrollbar, Frame and size of Frame Maksim 2 8,944 Sep-30-2019, 07:30 AM
Last Post: Maksim
  [Tkinter] create and insert a new frame on top of another frame atlass218 4 11,001 Apr-18-2019, 05:36 PM
Last Post: atlass218
  [Tkinter] Frame size only works if frame is empty(Solved) Tuck12173 7 6,368 Jan-29-2018, 10:44 PM
Last Post: Larz60+

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020