2011-01-31 4 views
4

PIL을 사용하여 Tkinter 캔버스에 이미지를 임베드하려고하는데, 어떤 이유로 그것이 보이지 않습니다. 어떤 아이디어?PIL을 사용하여 Tkinter Canvas widget에 이미지 삽입하기

오류나 경고는 없습니다. 그냥 빈 Tk 창.

내 코드 :

import Tkinter 
from PIL import ImageTk, Image 


class image_manip(Tkinter.Tk): 
    def __init__(self,parent): 
     Tkinter.Tk.__init__(self,parent) 

     self.ImbImage = Tkinter.Canvas(self) 
     self.ImbImage.pack() 

     i = ImageTk.PhotoImage(Image.open('test.png')) 
     self.ImbImage.create_image(0, 0, image=i) 

def run(): 
    image_manip(None).mainloop() 
if __name__ == "__main__": 
    run() 

답변

7

내 생각 엔 이미지가 가비지 수집지고 있다는 점이다. "i"에 대한 참조 저장 (예 : self.image = i)

+0

네, 감사했습니다. – rectangletangle

+0

@ 브라이언 오클리 그게 내 정확한 문제 였어. 어떻게 알았어? 이미지가 다음 줄에 참조되어 있어도 왜 그렇게 빨리 가비지 수집됩니까? '자기'는 어떤 차이가 있니? – theJollySin

+1

@theJollySin :'self'의 차이는'i'가 지역 변수라는 것입니다. 그 함수가 끝나면'i'가 가비지 수집 될 수 있습니다. 'self'를 사용하면 객체의 수명에 대한 참조가 존재합니다. –

관련 문제