2015-11-08 29 views
1

我是新來的Python GUI編程,通過本教程說明Tkinter的去使用類名沒有定義,甚至說明後

我嘗試下面的代碼

import Tkinter 

class simpleapp_tk(Tkinter.Tk): 
    def __init__(self,parent): 
      Tkinter.Tk.__init__(self,parent) 
      self.parent=parent 
      self.initialize() 

    def initialize(self): 
     pass 
    if __name__=="__main__": 
     app=simpleapp_tk(None) 
     app.title('my application') 
     app.mainloop() 

我期望的空白窗口,而是得到這個

Traceback (most recent call last): 
    File "C:/Users/vedev/Desktop/python/app1.py", line 3, in <module> 
    class simpleapp_tk(Tkinter.Tk): 
    File "C:/Users/vedev/Desktop/python/app1.py", line 12, in simpleapp_tk 
app=simpleapp_tk(None) 
NameError: name 'simpleapp_tk' is not defined 

我該如何調試?

回答

2

這是縮進問題。只是不縮進

if __name__ == "__main__": 
    app = simpleapp_tk(None) 
    app.title('my application') 
    app.mainloop() 

在當前的代碼,如果同時simpleapp_tk被定義,從而name 'simpleapp_tk' is not defined被執行的語句。

Indentation參見

在邏輯行的開頭前導空白(空格和製表符)用於計算線,這反過來又被用於確定語句的分組的縮進級別。

+0

是的,現在就去吧。 thanx尋求幫助@tynn –

0

整個if語句在類中。如果你將它移到外面,它將起作用。

問題是,這樣,只要定義了類,就會執行if語句,但在類定義期間,您還無法訪問它。

0

問題在於壓痕部分。您需要遵循整個塊的單個縮進級別,在此例中爲class simpleapp_tk。這裏是上面的代碼完全適合我:

import Tkinter 

class simpleapp_tk(Tkinter.Tk): 
    def __init__(self, parent): 
     Tkinter.Tk.__init__(self, parent) 
     self.parent = parent 
     self.initialize() 

    def initialize(self): 
     pass 

if __name__ == "__main__": 
    app = simpleapp_tk(None) 
    app.title('my application') 
    app.mainloop() 
+0

是的..它現在工作了..謝謝你@IshanKhare –