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

为什么Tkinter中Toplevel窗口设置title后仍默认显示为'tk'?

问题原因

出现该问题的核心原因如下:

  1. 代码没有显式创建Tk()类型的主根窗口,Tkinter会自动隐式生成一个默认主窗口,该窗口的默认标题就是tk
  2. 你调用window.withdraw()将自己创建的Toplevel窗口隐藏了,最终展示的是那个自动生成的默认主窗口,自然不会显示你设置的Analysis标题;同时你在窗口隐藏状态下才设置title属性,部分系统环境下隐藏状态修改窗口属性不会生效。

解决方案

方法1:直接使用主窗口作为业务窗口

如果这个标题为Analysis的窗口就是你的主程序窗口,不需要额外创建Toplevel,直接用Tk()实例即可:

from tkinter import *
import win32api
from tkinter import filedialog
from mood import Dominant
from form import Assessment
import json

ca=Assessment()
# 直接创建主窗口,不要用Toplevel
window = Tk()
window.title("Analysis")
# 删除window.withdraw()调用,否则窗口会被隐藏
# 后续业务逻辑写完后启动主循环
window.mainloop()

方法2:确实需要使用Toplevel的场景

如果你确实需要Toplevel作为子窗口,先显式创建并隐藏主根窗口,再配置Toplevel属性后显示:

from tkinter import *
import win32api
from tkinter import filedialog
from mood import Dominant
from form import Assessment
import json

ca=Assessment()
# 先显式创建主根窗口
root = Tk()
# 隐藏主根窗口
root.withdraw()
# 创建绑定了主窗口的子窗口
window = Toplevel(root)
window.title("Analysis")
# 不要调用window.withdraw(),否则子窗口也会被隐藏
# 绑定子窗口关闭时退出整个程序
window.protocol("WM_DELETE_WINDOW", root.destroy)
# 启动主循环
root.mainloop()

注意事项

  • 窗口属性(标题、大小、位置等)设置要放在窗口显示操作之前,不要在withdraw()隐藏窗口之后修改,避免部分系统环境下属性不生效
  • 任何Tkinter程序必须有且只有一个Tk()实例作为主根窗口,禁止只创建Toplevel不创建主根窗口,否则就会出现自动生成的默认主窗口。

内容的提问来源于stack exchange,提问作者ugur çapan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:39:03