python tkinter 窗口跳转后仅显示窗口

python tkinter 窗口跳转后仅显示窗口
import tkinter as tk
from studentloginpage import StudentLoginIn


class SwitchPage:
    def __init__(self, master):
        self.root = master
        self.root.geometry('300x180')
        self.root.title('登陆页')

        self.page = tk.Frame(root)
        self.page.pack()

        tk.Button(self.page, text='学生端', command=lambda: [self.page.destroy(), StudentLoginIn(self.root)])\
            .grid(row=1, column=1, pady=60)

        tk.Button(self.page, text='教师端', command=self.page.destroy).grid(row=1, column=4, pady=60)


if __name__ == '__main__':
    root = tk.Tk()
    SwitchPage(master=root)
    root.mainloop()


import tkinter as tk
from tkinter import messagebox
from studentDatabase import db


class StudentLoginIn:
    def __init__(self, master):
        self.root = master
        self.root.geometry('400x200')
        self.root.title('登录')

        self.studentNumber = tk.StringVar()
        self.password = tk.StringVar()

        self.page = tk.Frame(root)
        self.page.pack()

        tk.Label(self.page).grid(row=0, column=0)

        tk.Label(self.page, text='学号:').grid(row=1, column=1)
        tk.Entry(self.page, textvariable=self.studentNumber).grid(row=1, column=2)
        tk.Label(self.page, text='密码:').grid(row=2, column=1)
        tk.Entry(self.page, textvariable=self.password).grid(row=2, column=2)

        tk.Button(self.page, text='登录', command=self.login).grid(row=3, column=1, pady=10)
        tk.Button(self.page, text='注册').grid(row=3, column=2)

    def login(self):
            number = self.studentNumber.get()
            password = self.password.get()
            flag, message = db.check_login(number, password)
            print(number, password)
            if flag:
                print('登陆成功')
            else:
                messagebox.showwarning(title='错误', message=message)


if __name__ == '__main__':
    root = tk.Tk()
    StudentLoginIn(master=root)
    root.mainloop()


仅运行第二段代码正常

img

运行第一段代码后无法显示第二段代码所示的页面

img


img

我的解答思路和尝试过的方法
我想要达到的结果

在 Tkinter 中,您可以使用 Toplevel 窗口来创建新窗口,并使用 withdraw() 方法隐藏原来的主窗口。您可以在新窗口中显示所需的内容,然后使用 deiconify() 方法重新显示主窗口。

下面是一个简单的示例,展示了如何在 Tkinter 中实现窗口跳转:

import tkinter as tk

# 创建主窗口
root = tk.Tk()

# 创建新窗口
new_window = tk.Toplevel(root)

# 显示新窗口中的内容
label = tk.Label(new_window, text="This is a new window")
label.pack()

# 隐藏主窗口
root.withdraw()

# 启动消息循环
root.mainloop()

在上面的代码中,我们创建了一个新的 Toplevel 窗口,并使用 withdraw() 方法隐藏了主窗口。接下来,我们在新窗口中显示了一个标签,最后启动了消息循环。

请注意,如果您需要在新窗口中显示多个组件,可以使用容器组件(如 Frame)来包装这些组件,以便更好地管理布局。