You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 14:57:37