类型错误:超()参数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)