如何暂停tkinter/CTK登录窗口并开启新窗口,后续可恢复原窗口?
使用Tkinter/CustomTkinter实现登录窗口暂停与恢复
核心实现思路
- 登录成功后隐藏登录窗口(而非销毁),用
withdraw()方法实现"暂停"效果 - 打开新窗口用
CTkToplevel,与主窗口保持独立运行 - 需要恢复时调用
deiconify()重新显示登录窗口,可配合清空输入框优化复用体验
完整代码示例
import customtkinter as ctk import tkinter as tk class LoginWindow(ctk.CTk): def __init__(self): super().__init__() self.title("登录页") self.geometry("300x200") # 登录输入组件 self.username_entry = ctk.CTkEntry(self, placeholder_text="用户名") self.username_entry.pack(pady=10, padx=20, fill="x") self.password_entry = ctk.CTkEntry(self, placeholder_text="密码", show="*") self.password_entry.pack(pady=10, padx=20, fill="x") # 登录按钮 self.login_btn = ctk.CTkButton(self, text="登录", command=self.handle_login) self.login_btn.pack(pady=15) def handle_login(self): # 模拟登录验证(替换为你的真实业务逻辑) username = self.username_entry.get() password = self.password_entry.get() if username == "admin" and password == "123456": # 隐藏登录窗口 self.withdraw() # 启动主应用窗口 MainAppWindow(self) else: tk.messagebox.showerror("错误", "用户名或密码错误") class MainAppWindow(ctk.CTkToplevel): def __init__(self, login_window): super().__init__() self.login_window = login_window # 保存登录窗口引用 self.title("主应用") self.geometry("400x300") # 绑定窗口关闭事件,防止主窗口关闭后登录窗口丢失 self.protocol("WM_DELETE_WINDOW", self.on_close) ctk.CTkLabel(self, text="登录成功!欢迎使用主应用").pack(pady=50) # 返回登录页按钮 self.back_btn = ctk.CTkButton(self, text="返回登录页", command=self.go_back_to_login) self.back_btn.pack(pady=20) def go_back_to_login(self): # 关闭主应用窗口 self.destroy() # 恢复登录窗口并清空输入框 self.login_window.deiconify() self.login_window.username_entry.delete(0, tk.END) self.login_window.password_entry.delete(0, tk.END) def on_close(self): # 用户直接关闭主窗口时,自动恢复登录窗口 self.go_back_to_login() if __name__ == "__main__": ctk.set_appearance_mode("light") app = LoginWindow() app.mainloop()
关键代码说明
self.withdraw():隐藏登录窗口,窗口仍在后台运行,只是暂时不可见self.deiconify():重新显示被隐藏的登录窗口,恢复交互能力- 保存
login_window引用:让主应用窗口能直接操作登录窗口的显示状态 protocol("WM_DELETE_WINDOW", ...):处理用户直接关闭主窗口的场景,避免登录窗口永久丢失
内容的提问来源于stack exchange,提问作者Ahmed Hassan
相关产品推荐
相关产品推荐

