You need to enable JavaScript to run this app. Tkinter中canvas.create_image生成图片不显示,疑垃圾回收销毁PhotoImage如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter中canvas.create_image生成图片不显示,疑垃圾回收销毁PhotoImage如何解决

问题原因

Tkinter的PhotoImage对象存在引用保留机制缺陷,你代码里直接把PhotoImage(file='running_1.png')作为临时参数传入canvas.create_image(),方法执行完成后这个临时的图片对象没有被任何变量持有,会被Python垃圾回收机制提前销毁,最终画布上没有可渲染的图片资源,所以看不到内容。而create_rectangle生成的是画布内置矢量图形,不依赖外部对象引用,所以可以正常显示。

解决方法

只需要单独给PhotoImage实例赋值给一个变量,人为保留住它的引用即可,修改后的代码如下:

from tkinter import *

root = Tk()
canvas = Canvas(root, bg="yellow")
# 单独声明变量持有图片对象,避免被垃圾回收
dino_img = PhotoImage(file='running_1.png')
dino = canvas.create_image(600, 200, image=dino_img)

canvas.pack(fill="both", expand=True)

root.mainloop()

如果是在类中使用该方法,把图片对象赋值给实例属性即可,比如self.dino_img = PhotoImage(file='running_1.png'),就能保证实例生命周期内图片对象不会被回收。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 09:57:08