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

tkinter使用Toplevel创建界面时莫名弹出第二个窗口的问题咨询

问题根源
  • Tkinter程序运行时必须存在一个tk.Tk()实例作为根主窗口,你代码中直接使用tk.Toplevel()创建窗口时,系统检测到没有已初始化的tk.Tk()实例,会自动隐式生成一个空白主窗口,你显式创建的Toplevel就成为了第二个额外窗口。
  • Toplevel的设计定位是依附于主窗口的次级弹窗,本身不能作为主窗口使用。
修复方案

将代码中的root = tk.Toplevel()替换为root = tk.Tk()即可,修改后的完整运行代码如下:

import tkinter as tk
import os
from PIL import ImageTk, Image
parent = os.path.dirname(os.path.realpath(__file__))
assets = os.path.join(parent,"assets")
backgrounds = os.path.join(assets,"backgrounds")
print(assets)
root = tk.Tk()
frame = tk.Frame(root)
frame.pack()
path = os.path.join(backgrounds,"red to blue.png")
img = ImageTk.PhotoImage(Image.open(path))
panel = tk.Label(root, image=img)
panel.pack(side="bottom", fill="both", expand="yes")
root.mainloop()

特殊场景适配:如果有业务需求必须使用Toplevel作为展示窗口,可提前显式创建主窗口并隐藏,避免空白窗口出现:

# 先创建根主窗口并隐藏
main_win = tk.Tk()
main_win.withdraw()
# 再创建你的Toplevel窗口
root = tk.Toplevel()

额外注意事项

  • 如果你后续将背景图加载逻辑封装到函数中,需要保留img变量的全局引用,否则图片会被Python垃圾回收机制清理,导致背景显示空白。

内容的提问来源于stack exchange,提问作者william

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 23:15:07