Tkinter二级窗口Label显示图片报错:pyimage1不存在
问题根源与解决方案
核心问题在于你在tkinter中创建了多个Tk()实例——root = Tk()和window2 = Tk()。tkinter的设计逻辑是一个程序只能有一个主Tcl解释器(由第一个Tk()初始化),后续的窗口必须用Toplevel()创建作为主窗口的子窗口。多个Tk()会启动独立的Tcl环境,导致图片资源无法跨环境共享,这就是你看到报错的根本原因。
修正后的代码
from tkinter import * from PIL import ImageTk def show(): path = r'P:\Greece Slideshow\01001-MJR_20240511_5110080-Edit.jpg' pimg = ImageTk.PhotoImage(file=path) image_label.configure(image=pimg) # 将图片引用绑定到二级窗口对象,避免垃圾回收 window2.pimg = pimg root = Tk() # 用Toplevel创建二级窗口,关联主窗口root window2 = Toplevel(root) # 标签放在二级窗口,现在可以正常显示 image_label = Label(window2) image_label.pack() root.after(500, show) root.mainloop()
关键说明
- 替换
Tk()为Toplevel(root)后,二级窗口与主窗口共享同一个Tcl解释器,图片资源可以正常传递和显示,不管用Label还是Canvas组件都不会再报错。 - 图片引用的保存依然必要,这里绑定到
window2.pimg比root.pimg更合理,因为图片属于二级窗口。 - 这种方案完全符合tkinter的设计规范,不需要依赖Win32 API,保持了跨平台兼容性。
内容的提问来源于stack exchange,提问作者Marc Rochkind
相关产品推荐
相关产品推荐

