2013-12-11 97 views
0

所以我有一个画面上的图片。我想单击一个按钮来替换不同的图片。Tkinter帆布itemconfigure

画布代码:

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

这可能是PhotoImageGarbage Collector的问题。

但它更应该是self.__leftImageCanvas.image = newgif

-

当你离开函数,那么PhotoImage对象(newgif)由Garbage Collector破坏,所以你不必像在newgif,你不能看到它在Canvas

解决办法是PhotoImage对象(newgif)分配给全局变量或已有对象(例如self.__leftImageCanvas.image = newgif

-

在当前的代码,如果你有功能错误,那么Garbage Collector不能做其作业和形象(newgif)不被破坏。当代码正确时,Garbage Collector将从内存中删除newgif,并且Canvas没有要显示的图像。

+0

非常感谢你! – DanSuh