类型错误:超()参数1必须是类型,而不是classobj

问题描述:

from Tkinter import * 

class Application(Frame): 
    def __init__(self, master): 
     super(Application, self).__init__(master) 
     self.grid() 
     self.bttnClicks = 0 
     self.createWidgets() 

    def createWidgets(self): 
     self.bttn = Button(self) 
     self.bttn["text"] = "number of clicks" 
     self.bttn["command"] = self.upadteClicks 
     self.bttn.grid() 


    def upadteClicks(self): 
     self.bttnClicks += 1 
     self.bttn["text"] = "number of clicks " + str(self.bttnClicks) 

root = Tk() 
root.title("button that do something") 
root.geometry("400x200") 
app = Application(root) 
root.mainloop()` 

这就是错误:类型错误:超()参数1必须是类型,而不是classobj

super(Application, self).__init__(master) 
TypeError: super() argument 1 must be type, not classobj 

我在做什么错?代码在python 3.XX中工作正常,但在python 2.XX中没有。

Frame是不是一个新的风格类,但是super需要新的样式类的工作。在python-3.x中,一切都是新式类,super将正常工作。

需要硬编码的超类和方法在Python 2:

Frame.__init__(self, master) 

就像他们在official documentation做。

TKinter.Frame是Python 2上的旧式类。像super之类的功能将无法使用它。请参阅Frame.__init__直接:

Frame.__init__(self, master)