2015-11-08 95 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 –