如何让CustomTkinter的CTkToplevel窗口显示在主窗口前方?
解决CTkToplevel显示在主窗口下方的问题
有两种常用方法可以让错误提示窗口优先显示在主窗口前方:
方法1:使用lift()临时置顶
创建CTkToplevel实例后调用lift(),可将窗口提升到主窗口的上层:
import customtkinter app = customtkinter.CTk() # 模拟错误触发场景 trigger_error = True if not trigger_error: # 正常业务逻辑 pass else: err = customtkinter.CTkToplevel() err.geometry("350x100") err.title("Error") err.resizable(False, False) # 将窗口置于主窗口前方 err.lift() # 关联主窗口,确保窗口从属关系(关闭主窗口时自动关闭错误窗口) err.transient(app) # 让错误窗口相对于主窗口居中显示 err.update_idletasks() x = (app.winfo_width() // 2) - (350 // 2) + app.winfo_x() y = (app.winfo_height() // 2) - (100 // 2) + app.winfo_y() err.geometry(f"350x100+{x}+{y}") app.mainloop()
方法2:设置始终置顶属性
如果需要错误窗口一直保持在所有窗口最前方(包括其他应用窗口),可以启用-topmost属性:
import customtkinter app = customtkinter.CTk() trigger_error = True if not trigger_error: pass else: err = customtkinter.CTkToplevel() err.geometry("350x100") err.title("Error") err.resizable(False, False) # 强制窗口始终处于最上层 err.attributes("-topmost", True) # 关联主窗口并居中 err.transient(app) err.update_idletasks() x = (app.winfo_width() // 2) - (350 // 2) + app.winfo_x() y = (app.winfo_height() // 2) - (100 // 2) + app.winfo_y() err.geometry(f"350x100+{x}+{y}") app.mainloop()
注意:此方式会让窗口一直保持置顶状态,直到手动设置err.attributes("-topmost", False)或关闭窗口。
另外,原代码中的err.anchor("center")是无效语法,Tkinter窗口类没有该方法,上述示例中替换为了正确的居中计算逻辑。
内容的提问来源于stack exchange,提问作者Shubhwins
相关产品推荐
相关产品推荐

