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
相关产品推荐
相关产品推荐

