Tkinter如何在登录成功后跳转至目标Admin管理窗口?
Tkinter 登录窗口跳转Admin窗口实现方案
以下是两种生产环境常用的实现方案,优先推荐第一种,可避免多Tk实例引发的异常问题:
方案1:复用主窗口实例(推荐)
所有界面共用同一个Tk()根实例,切换时仅替换窗口内的组件,性能更稳定:
from tkinter import * from tkinter import messagebox # 你提供的Admin窗口类 class Admin: def __init__(self, root): self.root = root self.root.title("Covid 19 Admin Panel") self.root.geometry("1510x780+0+0") # 后续可在此添加Admin界面的其他业务组件 # 登录窗口类 class Login: def __init__(self, root): self.root = root self.root.title("系统登录") self.root.geometry("400x300+500+200") # 登录界面组件初始化 Label(self.root, text="用户名", font=("微软雅黑",12)).pack(pady=10) self.username_entry = Entry(self.root, font=("微软雅黑",12)) self.username_entry.pack(pady=5) Label(self.root, text="密码", font=("微软雅黑",12)).pack(pady=10) self.password_entry = Entry(self.root, font=("微软雅黑",12), show="*") self.password_entry.pack(pady=5) Button(self.root, text="登录", command=self.check_login, font=("微软雅黑",12), bg="#409EFF", fg="white").pack(pady=20) # 登录验证逻辑 def check_login(self): username = self.username_entry.get().strip() password = self.password_entry.get().strip() # 此处替换为你的实际验证逻辑,例如对接数据库校验账号密码 if username == "admin" and password == "123456": # 验证通过:清空当前登录窗口所有组件 for widget in self.root.winfo_children(): widget.destroy() # 加载Admin窗口界面 Admin(self.root) else: messagebox.showerror("错误", "用户名或密码错误") if __name__ == "__main__": root = Tk() ob = Login(root) root.mainloop()
核心逻辑说明:
- 全程仅创建一个
Tk()根实例,避免事件循环冲突、资源无法释放的问题 - 验证通过后遍历删除登录页所有组件,再将根实例传给
Admin类初始化即可完成界面切换 - 若需要支持退出登录回到登录页,可将
destroy()替换为pack_forget()/grid_forget()隐藏登录组件,退出登录时重新显示即可
方案2:独立弹出Admin窗口
如果需要保留登录窗口在后台,可使用Toplevel组件创建独立的Admin窗口,仅需修改验证逻辑部分:
def check_login(self): username = self.username_entry.get().strip() password = self.password_entry.get().strip() if username == "admin" and password == "123456": # 新建顶级窗口承载Admin界面 admin_root = Toplevel(self.root) Admin(admin_root) # 可选操作:隐藏登录窗口 self.root.withdraw() # 绑定关闭Admin窗口时重新显示登录窗口的逻辑 admin_root.protocol("WM_DELETE_WINDOW", lambda: [admin_root.destroy(), self.root.deiconify()]) else: messagebox.showerror("错误", "用户名或密码错误")
内容的提问来源于stack exchange,提问作者Edwin
相关产品推荐
相关产品推荐

