Python Tkinter无法显示图片:空白区域替代图片问题求助
解决Tkinter Label无法显示图片的问题
你的问题核心在于图片对象被Python垃圾回收机制销毁,导致Label无法获取图片资源,具体原因和解决方案如下:
问题原因
代码中logo_img是create_start_page方法内的局部变量,当方法执行完毕后,Python会自动回收这个局部变量占用的内存,Tkinter的Label组件因此失去了图片引用,只能显示空白区域。
解决方案
有两种简单有效的方式避免这个问题:
方式1:将图片对象存为类的实例变量
把图片对象赋值给类的实例属性(比如self.logo_img),让它的生命周期和类实例一致,避免被提前回收:
from tkinter import * from PIL import Image, ImageTk class Window: def __init__(self) -> None: self.root = Tk() self.root.title("Bingo") self.create_start_page() self.root.mainloop() def create_start_page(self): self.start_page = Frame( master=self.root, background="green", ) # 把图片对象存为实例变量 self.logo_img = PhotoImage(file='data/logo.png') logo_label = Label(master=self.start_page, image=self.logo_img) start_btn = Button( master=self.start_page, text="Start", ) logo_label.pack() start_btn.pack(anchor="center", expand=True) self.start_page.pack(fill=BOTH, expand=True, side=TOP) a = Window()
方式2:将图片对象绑定到Label组件的属性
把图片对象直接绑定到Label的自定义属性上,让Label持有图片引用:
# 在创建Label的代码段修改: logo_img = PhotoImage(file='data/logo.png') logo_label = Label(master=self.start_page, image=logo_img) logo_label.image = logo_img # 绑定图片到Label属性,防止被回收
额外检查点
除了引用问题,还要确认data/logo.png的路径是否正确:
- 如果是相对路径,要确保程序运行的当前目录下存在
data文件夹,且里面有logo.png文件; - 也可以使用绝对路径来避免路径歧义。
内容的提问来源于stack exchange,提问作者Unknown Pizzas
相关产品推荐
相关产品推荐

