Using buttons in Tkinter to navigate to different pages of the application?
Question: I have quite a simple question here. In Tkinter (python), i was wondering who
to use a button to go to different pages of my application, e.g a register
page, and a login page. I am aware that GUI does not have 'pages' like
websites do, ive seen a few different ways, but what is the best way to make
links to different pages?

Thank you all very much!


Answer: Make each page a frame. Then, all your buttons need to do is hide whatever is
visible, then make the desired frame visible.

A simple method to do this is to stack the frames on top of each other (this
is one time when `place` makes sense) and then ,`lift()` the frame you want to
be visible. This technique works best when all pages are the same size; in
fact, it requires that you explicitly set the size of containing frame.

The following is a contrived example. This isn't the only way to solve the
problem, just proof that it's not a particularly hard problem to solve:

    
    
    import Tkinter as tk
    
    class Page(tk.Frame):
        def __init__(self, *args, **kwargs):
            tk.Frame.__init__(self, *args, **kwargs)
        def show(self):
            self.lift()
    
    class Page1(Page):
       def __init__(self, *args, **kwargs):
           Page.__init__(self, *args, **kwargs)
           label = tk.Label(self, text="This is page 1")
           label.pack(side="top", fill="both", expand=True)
    
    class Page2(Page):
       def __init__(self, *args, **kwargs):
           Page.__init__(self, *args, **kwargs)
           label = tk.Label(self, text="This is page 2")
           label.pack(side="top", fill="both", expand=True)
    
    class Page3(Page):
       def __init__(self, *args, **kwargs):
           Page.__init__(self, *args, **kwargs)
           label = tk.Label(self, text="This is page 3")
           label.pack(side="top", fill="both", expand=True)
    
    class MainView(tk.Frame):
        def __init__(self, *args, **kwargs):
            tk.Frame.__init__(self, *args, **kwargs)
            p1 = Page1(self)
            p2 = Page2(self)
            p3 = Page3(self)
    
            buttonframe = tk.Frame(self)
            container = tk.Frame(self)
            buttonframe.pack(side="top", fill="x", expand=False)
            container.pack(side="top", fill="both", expand=True)
    
            p1.place(in_=container, x=0, y=0, relwidth=1, relheight=1)
            p2.place(in_=container, x=0, y=0, relwidth=1, relheight=1)
            p3.place(in_=container, x=0, y=0, relwidth=1, relheight=1)
    
            b1 = tk.Button(buttonframe, text="Page 1", command=p1.lift)
            b2 = tk.Button(buttonframe, text="Page 2", command=p2.lift)
            b3 = tk.Button(buttonframe, text="Page 3", command=p3.lift)
    
            b1.pack(side="left")
            b2.pack(side="left")
            b3.pack(side="left")
    
            p1.show()
    
    if __name__ == "__main__":
        root = tk.Tk()
        main = MainView(root)
        main.pack(side="top", fill="both", expand=True)
        root.wm_geometry("400x400")
        root.mainloop()
    

