TypeError:super()参数1必须是type,而不是classobj

时间:2017-05-03 18:57:02

标签: python python-2.7 tkinter super

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()`

那是错误:

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

我做错了什么?代码在python 3.XX中运行良好,但在python 2.XX中它没有。

2 个答案:

答案 0 :(得分:2)

Frame不是新式的类,但super需要新式的类才能工作。在python-3.x中,所有内容都是新式的类,super将正常工作。

你需要在python 2中对超类和方法进行硬编码:

Frame.__init__(self, master)

就像他们在official documentation中所做的那样。

答案 1 :(得分:0)

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

Frame.__init__(self, master)