Skip to content Skip to sidebar Skip to footer

Switching Between Frames In Python With Functions

I wish to have two functions in which I have frames that I can easily switch between. I can remove the 'go' frame but I am unsure how to show another frame afterward. from tkinte

Solution 1:

Scope of parent seems to be confined to constructor initialization. You are calling parent again in menuScreen function.

Try defining a local variable within class say parent and pass parent1 as argument to the constructor. That way parent attribute is visible throughout the class.

I was able to advance to next screen using above, although it ran into some other issues which I believe may be dependent on other part of your code that's not presented here.

Here is modified code.

from tkinter import *

classTrip:
    def__init__(self, parent1):
        self.parent = parent1
        self.go = Frame(self.parent, width=500, height=450)
        self.go.grid(row=0, column=0)
        self.go.grid_propagate(0)  # to reserve space required for frame
        menuButton = Button(self.go, text="Continue", command=self.menuScreen)
        menuButton.grid(row=1, column=0)


    defmenuScreen(self):
        self.go.grid_remove()
        self.menu = Frame(self.parent, width=500, height=450, bg='orchid')
        self.menu.grid(row=0, column=0)
        self.menu.grid_propagate(0)  # to reserve space required for frame

        self.addMore = Button(self.menuScreen, text="Return", command=self.__init__)
        self.addmore.grid(row=1, column=0)


if __name__ == "__main__":
    root = Tk()
    root.title("Traveller Details")
    play = Trip(root)
    root.geometry("500x450+0+0")
    root.mainloop()

Output:

enter image description here

Solution 2:

You need to create the two frames in __init__ first; then show the tk window with the first frame.

A clickable button on each frame allows you to switch back and forth between the two frames.

"""
demonstrate switching back and forth between tkinter frames
"""import tkinter as tk

classTrip:
    """
    A class to demonstrate switching back and forth between tkinter frames
    """def__init__(self, parent):
        self.parent = parent
        self.parent.title("Traveller Details")
        self.parent.geometry("500x450+0+0")        

        self.go_frame = tk.Frame(self.parent, width=500, height=450, bg='light blue')
        self.goto_menu_frame_button = tk.Button(self.go_frame, text="Continue", command=self.menu_screen)

        self.menu_frame = tk.Frame(self.parent, width=500, height=450, bg='light steel blue')
        self.goto_go_frame_button = tk.Button(self.menu_frame, text="Return", command=self.go_screen)

        self.current_frame = None
        self.go_screen()

    defgo_screen(self):
        """
        The first screen to be visible - has a clickable button to switch 
        to the other screen 
        """
        self.remove_current_frame()
        self.current_frame = self.go_frame
        self.go_frame.grid(row=0, column=0)
        self.go_frame.grid_propagate(0)  # to reserve space required for frame
        self.goto_menu_frame_button.grid(row=1, column=0)

    defmenu_screen(self):
        """
        The second screen - has a clickable button to switch back to the first screen 
        """
        self.remove_current_frame()
        self.current_frame = self.menu_frame
        self.menu_frame.grid(row=0, column=0)
        self.menu_frame.grid_propagate(0)  # to reserve space required for frame
        self.goto_go_frame_button.grid(row=0, column=0)

    defremove_current_frame(self):
        """
        removes the current frame from the grid if it exists
        """if self.current_frame isnotNone:
            self.current_frame.grid_remove()

    defstart(self):
        """
        launches the GUI
        """
        self.parent.mainloop()


if __name__ == "__main__":
    trip = Trip(tk.Tk())
    trip.start()

Post a Comment for "Switching Between Frames In Python With Functions"