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:
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"