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()
运行第一段代码后无法显示第二段代码所示的页面
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
)来包装这些组件,以便更好地管理布局。