2011-05-09 103 views
0

我已經創建了兩個小部件:一個標籤和一個畫布,它們在一個類的內部以及類的方法init中。出於某種原因,沒有一個小部件出現,它只是給我一個空白的tkinter窗口。Python 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 2011-05-09 08:07:37

+0

我認爲這可能是問題所在。這是我開始(不包括初始化tkinter) – Steven 2011-05-09 09:14:28

回答

2

如果這是所有的代碼,你忘了運行根窗口的mainloop方法。窗口繪圖通過事件循環處理的事件發生;如果它不運行,窗戶不會有機會在屏幕上自己畫畫。

+0

不,我已經初始化tkinter。我發現問題出在別的地方,應用程序窗口正在引導到另一個類。 – Steven 2011-05-11 08:41:45

2

此處僅供參考,代碼的工作版本。請注意我是如何通過爲主參數。另外,請注意我在根上如何使用.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()