2013-12-11 99 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