2011-05-09 4 views
0

저는 위젯 두 개를 만들었습니다 : 그들은 클래스의 내부에 있으며 레이블의 init 메소드에 라벨과 캔버스를 만들었습니다. 웬일인지, 어떤 위젯도 나타나지 않는다. 그리고 그것은 단지 나에게 빈 tkinter 창문을 준다. 그 모든 코드 인 경우파이썬 tkinter 위젯이 보이지 않습니다.

def __init__ (self, master): 
    self.mousepos = 0,0 
    self.clickpos = 0,0 
    self.poslabel = Label(master, text = "Mouse Click: " \ 
          + str(self.clickpos) + "Cursor Point: "\ 
          + str(self.mousepos)) 
    self.poslabel.pack() 
    self.fcanvas = Canvas(master,width=800,height=400, bg = 'grey90',\ 
          borderwidth = 5, relief = RAISED) 
    self.fcanvas.bind("<Button-1>", self.pressButton1) 
    self.fcanvas.pack() 
+0

당신은 마스터로 무엇을 전달합니까? 전체 코드를 입력하십시오 – luc

+0

그게 문제라고 생각합니다. 이것은 내가 시작한 것입니다 (초기화 tkinter 제외). – Steven

답변

2

, 당신은 당신의 루트 윈도우의 mainloop 방법을 실행 잊고 있습니다. 창 그리기는 이벤트 루프에 의해 처리되는 이벤트를 통해 발생합니다. 실행되지 않으면 창에 화면에 자신을 그릴 기회가 없습니다.

+0

아니요, tkinter를 초기화했습니다. 문제가 다른 응용 프로그램 창에서 다른 클래스로 전달되는 것으로 나타났습니다. – Steven

2

참조 용 코드는 다음과 같습니다. master 인수로 루트을 어떻게 넘겼는지 주목하십시오. 또한, 루트에서 .mainloop() 메소드를 어떻게 사용했는지 기록해 두십시오.

Tkinter는 루프로 실행됩니다. .mainloop() 메서드를 호출하지 않으면 프로그램이 제대로 실행되지 않습니다.

이 작동합니다 :

from Tkinter import * 

class MyWidgets : 
    def __init__ (self, master) : 
     self.mousepos = 0,0 
     self.clickpos = 0,0 
     self.poslabel = Label(master, text = "Mouse Click: " \ 
           + str(self.clickpos) + "Cursor Point: "\ 
           + str(self.mousepos)) 
     self.poslabel.pack() 

     self.fcanvas = Canvas(master, width=800,height=400, bg = 'grey90',\ 
           borderwidth = 5, relief = RAISED) 
     self.fcanvas.bind("<Button-1>", self.pressButton1) 
     self.fcanvas.pack() 

    def pressButton1 (self, event) : 
     print 'You pressed button 1!' 

if __name__ == '__main__' : 

    root = Tk() 
    MyWidgets(root) 
    root.mainloop() 
관련 문제