所以我有一张画布上有一张照片。我想点击一个用不同的图片替换图片的按钮。
Canvas代码:
self.__leftImageCanvas = Canvas(self.__frame3,width = 200, height = 150, bg = 'white')
gif1 = PhotoImage(file = 'b.gif')
self.__leftImage = self.__leftImageCanvas.create_image(50, 10, image = gif1, anchor = NW)
在画布上编辑图片的功能:
newgif = PhotoImage(file = '2h.gif')
self.__leftImageCanvas.itemconfigure(self.__leftImage, image = newgif)
self.__leftImageCanvas.image = 'b.gif'
我不明白上面的最后一行代码。这是我根据其他问题/答案设法写的东西。 现在,当我故意在最后一行中出现错误时,如语法错误,画布图片成功更改。但如果代码行没有错误,画布图片不会改变,但会完全消失。
答案 0 :(得分:0)
PhotoImage
和Garbage Collector
可能存在问题。
但它应该是self.__leftImageCanvas.image = newgif
-
当您离开功能时PhotoImage
对象(newgif
)被Garbage Collector
销毁,因此您在newgif
中没有图像而您无法看到它Canvas
。
解决方案是将PhotoImage
对象(newgif
)分配给全局变量或现有对象(例如self.__leftImageCanvas.image = newgif
)
-
在当前代码中,如果您在函数中有错误,则Garbage Collector
无法完成其工作,并且图像(newgif
)不会被破坏。当代码正确时,Garbage Collector
会从内存中删除newgif
而Canvas
没有要显示的图片。