这是一种替代方法:在框架中定义每个“页面”。然后使用调用lift
将适当的框架置于其他框架之上。 (以下代码大量借用了 Bryan Oakley 的代码here https://stackoverflow.com/a/14819141/190597.)
import tkinter as tk
class Page(tk.Frame):
def __init__(self, master, text, height, width, *args, **kwargs):
tk.Frame.__init__(self, *args, borderwidth=20, **kwargs)
self.height = height
self.width = width
button = tk.Button(self, text=text, font=('Comic Sans MS', 20),
command=lambda: self.callback())
button.pack(side="top", fill="both", expand=True)
def onlift(self):
root.geometry('{}x{}'.format(self.width, self.height))
self.lift()
class App(tk.Frame):
def __init__(self, *args, **kwargs):
tk.Frame.__init__(self, *args, **kwargs)
p1 = Page(self, 'Login 1', height=200, width=300)
p2 = Page(self, 'Next page is 2', height=400, width=300)
p3 = Page(self, 'We love number 3', height=400, width=600)
p1.callback = p2.onlift
p2.callback = p3.onlift
p3.callback = p1.onlift
p1.place(x=0, y=0, relwidth=1, relheight=1)
p2.place(x=0, y=0, relwidth=1, relheight=1)
p3.place(x=0, y=0, relwidth=1, relheight=1)
p1.onlift()
root = tk.Tk()
app = App(root)
root.mainloop()
上面我只定义了一种Frame
,称为Page
。对于你的情况,你想要一个Login
帧,然后是后续帧:
p1 = Login(self, ...)
p2 = Registered(self, ...)