简体   繁体   中英

Python - How to switch frames in a Tkinter window

I want to switch frames in a Tkinter window but the previous frame always stays visible in the background.

This is the code I have:

from tkinter import *

class frame(Frame):

    def __init__(self,display):
        Frame.__init__(self,display)
        l = Label(self,text="frame1")
        l.pack()

class frame2(Frame):

    def __init__(self,display):
        Frame.__init__(self,display)
        l = Label(self,text="frame2")
        l.pack()   

class test(Tk):

    def __init__(self):
        Tk.__init__(self)
        f = frame(self)
        f.grid(row=0)
        f2 = frame2(self)
        f2.grid(row=0)
        f.tkraise()

t = test()
t.mainloop()

This works if the layout of the two frames is the same but if I add another label to the second frame, it will still be visible in the Background. Is there a way to switch frames so that only elements from the raised frame are visible?

As requested, this is what I used to fix my problem:

from tkinter import *

class frame(Frame):

    def __init__(self,display):
        Frame.__init__(self,display)
        l = Label(self,text="frame1")
        l.pack()

class frame2(Frame):

    def __init__(self,display):
        Frame.__init__(self,display)
        l = Label(self,text="frame2")
        l.pack()   

class test(Tk):

    def __init__(self):
        Tk.__init__(self)
        f2 = frame2(self)
        f2.grid(row=0)

        #To raise the first frame, I used the following
        frame2.grid_remove()
        f = frame(self)
        f.grid(row=0)

t = test()
t.mainloop()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM