2012-09-11 2 views
1

나는 iPhoto 또는 다른 유사한 프로그램의 메인 화면과 마찬가지로 이미지 그리드를 표시하기 위해 응용 프로그램에서 작업하고 있습니다. 이렇게하려면, 나는 캔버스를 설정하고, 파일 이름의 목록을 반복 각에서 광 화상을 만들고, 캔버스에 그들을 표시 : Application 클래스의 속성입니다Tkinter create_image not displayed

self.canvas = Canvas(self.bottomFrame, width = 700, height = 470, bg = "Red") 
self.canvas.pack() 

for i, filename in enumerate(image_list): 
    photo_image = PhotoImage(filename) 
    self.canvas.create_image(100*(round(i/4)+1), 100*(i+1), image = photo_image) 
    self.labelList.append(photo_image) 

labelList하고, image_list는 .gif 사진의 파일 이름으로 채워집니다. 그러나 앱을 실행하면 이미지가 표시되지 않습니다. 빨간색 사각형이 나타나기 때문에 캔버스가 있다는 것을 알고 있지만 이미지가 없습니다.

내가 여기에 무엇을 놓치고 있습니까? 결과를 찾고있는 끝없는 토론 페이지를 스크롤하여 그 작업을 찾지 못했습니다.

+0

어떤 유형의 파일이'filename'입니까? – mgilson

+0

"응용 프로그램에서 이미지 객체에 대한 참조를 유지해야합니다." http://effbot.org/tkinterbook/canvas.htm#Tkinter.Canvas.create_image-method. 물론 했니? – lolopop

+0

@pythonm - 참조는'self.labelList'에 보관되어야합니다. 문제 없습니다. – mgilson

답변

2
photo_image = PhotoImage(filename) 

PhotoImage__init__ 기능은 다음과 같습니다 이후

photo_image = PhotoImage(file=filename) 

그렇지 않으면, 당신은 단지, name을 설정해야합니다

__init__(self, name=None, cnf={}, master=None, **kw) 

알을 따라서 PhotoImage은 GIF 및 PGM/PPM 파일 만 처리 할 수 ​​있습니다. 다른 파일 형식을 원하면 PIL (example)을 사용해야합니다.

+0

argv! 기능을 정의하는 것은 어리석은 방법입니다. (+1) – mgilson

+0

@mgilson 예, 전혀 직관적이지 않습니다. 주요 문제는 이미지가 표시되지 않는다는 것 외에이 함정에 빠지면 아무런 피드백을받지 못한다는 것입니다. – sloth

+0

@BigYellowCactus 감사합니다! 완벽하게 일했습니다. 이제 나는 그저 그렇게 단순한 것에 짜증났다. –