为什么Tkinter中Toplevel窗口设置title后仍默认显示为'tk'?
问题原因
出现该问题的核心原因如下:
- 代码没有显式创建
Tk()类型的主根窗口,Tkinter会自动隐式生成一个默认主窗口,该窗口的默认标题就是tk - 你调用
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
相关产品推荐
相关产品推荐

