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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:52:38