ImageTk.PhotoImage로 얽힌 이야기

문제



PSD 파일을 읽고 레이어별로 tkinter의 Canvas에 표시하려고하면 할 수 없어서 곤란한 이야기

문제 코드
def preview(path):
   global canvas
   image = PSDImage.open(path)
   imagetk = ImageTk.PhotoImage(image)
   canvas.create_image(image=imagetk)

원인



함수에서 "ImageTk.PhotoImage"를 사용하여 객체를 생성했을 뿐이라고 가비지 컬렉션에서 지워져 Canvas에서 표시되지 않는다는 정보가 인터넷에서 발견
Canvas는 참조하고 있는 것이 아닐까?
그것이나 함수내의 것이기 때문에 함수의 처리 끝나면 사라져 버린다든가?
잘 모르겠다

대책



제대로 남기도록 생성된 객체는 글로벌 배열로 저장하기로 했습니다.

수정 후
imagetk_list = list()
def preview(path):
   global canvas,imagetk_list
   image = PSDImage.open(path)
   imagetk = ImageTk.PhotoImage(image)
   imagetk_list.append(imagetk)
   canvas.create_image(image=imagetk)

화면



아니, 캔버스에 낼 수 있었어.

좋은 웹페이지 즐겨찾기