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

无法在同一Tkinter窗口中显示多张图片的问题求助

Tkinter同一窗口显示两张图片仅显示第二张的解决方法

问题出在Tkinter的PhotoImage对象会被Python垃圾回收机制回收:你两次都用了同一个变量img,第二次赋值时,第一个对应Target.png的PhotoImage对象失去了引用,被回收后,第一个画布就只剩空框了。

解决方法有两种,任选其一即可:

方法1:使用不同变量保存每个PhotoImage对象

给每张图的PhotoImage分配单独的变量名,保留引用:

###-------Making the main Information-----=-#####
canvas = Canvas(main_WINDOW, width = 50, height = 50)
canvas.place(x=370, y=124)
# 用img1保存第一张图的引用
img1 = PhotoImage(file="Target.png")
canvas.create_image(0, 0, anchor=NW, image=img1)

mycanvas = Canvas(main_WINDOW, width = 50, height = 50)
mycanvas.place(x=1200, y=124)
# 用img2保存第二张图的引用
img2 = PhotoImage(file="Target copy.png")
mycanvas.create_image(0, 0, anchor=NW, image=img2)

方法2:将PhotoImage绑定到画布属性上

把图片对象绑定到对应画布的属性上,这样画布存在时,图片引用就不会被回收:

###-------Making the main Information-----=-#####
canvas = Canvas(main_WINDOW, width = 50, height = 50)
canvas.place(x=370, y=124)
# 绑定到canvas的img属性
canvas.img = PhotoImage(file="Target.png")
canvas.create_image(0, 0, anchor=NW, image=canvas.img)

mycanvas = Canvas(main_WINDOW, width = 50, height = 50)
mycanvas.place(x=1200, y=124)
# 绑定到mycanvas的img属性
mycanvas.img = PhotoImage(file="Target copy.png")
mycanvas.create_image(0, 0, anchor=NW, image=mycanvas.img)

原理很简单:Tkinter的PhotoImage必须在Python层面保留一个引用,否则会被垃圾回收器清理,画布自然显示不了图片。上面两种方法都是通过保留引用,避免图片对象被回收。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:31:16