答案:tkinter中显示图片需用PhotoImage类,原生支持GIF格式;对于JPG、PNG等格式需借助Pillow库的ImageTk.PhotoImage;加载后必须保存引用防止被回收,并可使用Pillow调整大小。

在 Python 的 tkinter 中显示图片,主要使用 PhotoImage 类。但要注意它只支持 GIF 和 PGM/PPM 格式。如果想显示常见的 JPG、PNG 等格式,需要用 Pillow(PIL)库辅助。
1. 显示 GIF 图片(原生支持)
tkinter 原生支持 GIF,可以直接用 PhotoImage 加载:
import tkinter as tk
from tkinter import PhotoImage
<p>root = tk.Tk()
root.title("显示GIF图片")</p><h1>注意:路径要正确,且图片必须是 .gif 格式</h1><p>img = PhotoImage(file="example.gif")</p><p><span>立即学习</span>“<a href="https://pan.quark.cn/s/00968c3c2c15" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">Python免费学习笔记(深入)</a>”;</p><p>label = tk.Label(root, image=img)
label.pack()</p><h1>保持引用,防止被垃圾回收</h1><p>root.image = img</p><div class="aritcle_card flexRow">
<div class="artcardd flexRow">
<a class="aritcle_card_img" href="/ai/1288" title="Peppertype.ai"><img
src="https://img.php.cn/upload/ai_manual/001/431/639/68b6d9fe2479d181.png" alt="Peppertype.ai" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a href="/ai/1288" title="Peppertype.ai">Peppertype.ai</a>
<p>高质量AI内容生成软件,它通过使用机器学习来理解用户的需求。</p>
</div>
<a href="/ai/1288" title="Peppertype.ai" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
</div>
</div><p>root.mainloop()
2. 显示 JPG/PNG 等格式(使用 Pillow)
安装 Pillow:
pip install pillow
然后这样使用:
import tkinter as tk
from PIL import Image, ImageTk
<p>root = tk.Tk()
root.title("显示JPG/PNG图片")</p><h1>打开并转换图片</h1><p>image = Image.open("example.jpg") # 支持 jpg, png, webp 等
photo = ImageTk.PhotoImage(image)</p><p>label = tk.Label(root, image=photo)
label.pack()</p><h1>保持引用</h1><p>root.image = photo</p><p>root.mainloop()
3. 调整图片大小
用 Pillow 可以轻松缩放图片:
image = Image.open("example.jpg")
image = image.resize((300, 200)) # 调整为 300x200
photo = ImageTk.PhotoImage(image)
4. 注意事项
- 一定要保存图片对象的引用(如 root.image = photo),否则会被 Python 回收,界面就看不到图了。
- 路径错误或格式不支持会报错,确保文件存在且格式正确。
- 建议统一用 Pillow 的 ImageTk.PhotoImage,兼容性更好。
基本上就这些,不复杂但容易忽略引用问题。










