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

如何使用Pillow在Tkinter GUI中正常显示PNG图片

问题根因

你的代码有两个核心逻辑缺失,导致图片无法显示:

  • 加载完图片资源后,没有创建用于展示图片的控件,也没有把控件通过布局管理器添加到窗口中,相当于图片只存在于内存里,根本没有被渲染到界面上。
  • ImageTk.PhotoImage生成的图片对象如果没有被持久持有引用,会被Python的垃圾回收机制自动回收,哪怕你把控件加上了,最终也只会显示空白区域。
修复方案

在原有代码基础上补全图片控件创建、引用持有、布局挂载三步即可,修复后的完整代码如下:

from tkinter import *
from PIL import ImageTk, Image

w = 650
p = 470


x = (w/2) - (w/2)
y = (w/2) - (p/2)

def fourthWindowFunction():

        fourthWindow = Tk()
        fourthWindow.title("TED")

        fourthWindowTitle = Label(fourthWindow, text="Resultados")
        fourthWindowTitle.grid(column=1, row=0, padx=10, pady=10)

        
        image = Image.open(r"c:\users\tomas\deformada.png")
        # 如果图片尺寸过大超出窗口,可以放开下面这行调整尺寸适配
        # image = image.resize((400, 300))
        display = ImageTk.PhotoImage(image)

        # 创建承载图片的标签控件
        image_label = Label(fourthWindow, image=display)
        # 持有图片对象引用,防止被垃圾回收
        image_label.image = display
        # 把控件放到窗口布局中
        image_label.grid(column=1, row=1, padx=10, pady=10)

        generatePDF = Button(fourthWindow, text="Gerar Relatório PDF", command=None)
        generatePDF.grid(column=0, row=9, padx=10, pady=10)

        exit = Button(fourthWindow, text="Sair", command=quit)
        exit.grid(column=2, row=9, padx=10, pady=10)

        fourthWindow.geometry('%dx%d+%d+%d' % (w, p, x, y))
        fourthWindow.mainloop()

fourthWindowFunction()
额外说明
  • Tkinter 不推荐在一个程序中创建多个Tk()根窗口,如果后续需要多窗口,建议用Toplevel()控件实现,避免出现消息循环、资源引用相关的异常。
  • 如果图片显示不全,直接调用Pillow的resize()方法把图片调整到适配窗口的尺寸即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:06:30