2016-11-23 1 views
-2

코딩 오류가 발생하지 않습니다. 그것은 단지 이미지를 보여주지 않습니다.이미지가 표시되지 않습니까?

class StartPage(tk.Frame): 

    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 
     self.controller = controller 
     image = tkinter.PhotoImage(file="NORTHERNICE (1).gif") 
     #../Documents/ 
     tkinter.Label(self, image=image).pack() 
     start = Button(self, text ="Choose a class", fg="#a1dbcd", bg="#383a39", command = lambda: controller.show_frame('PageOne'), font=("Gisha", 10)) 
     start.pack() 
+0

시작 페이지 (tk.Frame) :는 들여 쓰는 정의 블록 앞에 있습니다. –

+0

'__init__'은 클래스의 생성자라고 가정하면 클래스 이름과 클래스가 인스턴스화되는 코드를 포함해야합니다. – gus27

+0

음, 내가 어떻게 이런 식으로 새로운 일종의? 친구가이 코드를 도와 주었다. –

답변

0

Tkinter를 여기에 포함 된 두 가지 언어가 있기 때문에, 이상한 짐승의 비트입니다 - 파이썬 (하는 당신은 당신의 코드를 작성) 및 (TK에 사용자 인터페이스 툴킷를 호스팅)은 Tcl. 두 환경 간의 상호 작용에는 다소 이상한 점이 있으며, 아마도 당신은 그 중 가장 눈부신 부분을 만났을 것입니다. 특히, 실제 PhotoImage 객체 (전체적으로 Tcl쪽에 존재)와 그것의 프록시 역할을하는 Python PhotoImage 객체의 수명 사이에는 적절한 동기화가 없습니다. 현재 Python 객체가 가비지 수집 된 경우 Tcl 객체가 여전히 이미지에 대한 Tcl 측 참조가있을지라도 Tcl 객체는 자동으로 삭제됩니다. 결과적으로 이미지의 파이썬 참조에 대해서는 로컬 변수 (예 : 코드에서 image) 만 사용할 수 없으므로 함수의 끝에서 사라집니다. 전역 변수에 이미지를 저장하면 효과적이지만 이미지를 너무 오랫동안 사용할 수 있습니다 (창을 닫은 상태에서도 삭제되지 않음). 인스턴스 변수로 저장하면 (예 : image 대신 self.image) 파이썬 인스턴스가 설명하는 Tcl 위젯과 정확히 일치 할 수 있기 때문입니다. 또 다른 인기있는 옵션은 이미지를 사용하는 위젯의 속성으로 이미지를 저장하는 것입니다.

+0

고마워요. 불행히도 나는이 대답을 '+1'할 수 없다. –

관련 문제