2013-12-11 3 views
0

그래서 그림이있는 캔버스가 있습니다. 사진을 다른 것으로 바꿀 버튼을 클릭하고 싶습니다.Tkinter Canvas 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이) 그래서 당신은 newgif에 이미지가없는 Garbage Collector에 의해 파괴되어 기능을 중단하고 당신이 그것을 볼 수없는 경우

Canvas에 있습니다. 현재 코드에서

당신이 다음 Garbage Collector 할 수없는 기능에 오류가있는 경우 -

솔루션

(예를 self.__leftImageCanvas.image = newgif에 대한) 전역 변수 또는 기존 개체에 PhotoImage 객체 (newgif)을 할당하는 것입니다 그 직업과 이미지 (newgif)는 파괴되지 않습니다. 코드가 Garbage Collector보다 정확하면 메모리에서 newgif을 제거하고 Canvas에 표시 할 이미지가 없습니다.

+0

대단히 감사합니다! – DanSuh