无法在同一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
相关产品推荐
相关产品推荐

