Python 2.7 super()错误

时间:2013-08-11 11:14:33

标签: python tkinter super

尝试使用super()创建Tkinter窗口。 我收到这个错误:

super(应用程序,自我)._ init _(主) TypeError:必须是type,而不是classobj

代码:

import Tkinter as tk

class Application(tk.Frame):

    def __init__(self, master):
        super(Application, self).__init__(master)
        self.grid()


def main():
    root = tk.Tk()
    root.geometry('200x150')
    app = Application(root)

    root.mainloop()


main()

2 个答案:

答案 0 :(得分:9)

虽然Tkinter确实使用旧式类,但可以通过从Application另外派生子类object来克服此限制(使用Python多重继承):

import Tkinter as tk

class Application(tk.Frame, object):

    def __init__(self, master):
        super(Application, self).__init__(master)
        self.grid()

def main():
    root = tk.Tk()
    root.geometry('200x150')
    app = Application(root)

    root.mainloop()

main()

只要Tkinter类没有尝试任何需要成为旧式类的行为(我非常怀疑它会这样),这将有效。我用Python 2.7.7测试了上面的例子,没有任何问题。

这项工作建议here。默认情况下,Python 3中也包含此行为(在链接中引用)。

答案 1 :(得分:3)

Tkinter使用旧式类。 super()只能与new-style classes一起使用。