6

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

TypeError: super() argument 1 must be type, not 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()
4

2 回答 2

11

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

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 测试了上面的例子,没有任何问题。

此处建议解决此问题。默认情况下,此行为也包含在 Python 3 中(在链接中引用)。

于 2014-10-15T00:39:35.930 回答
3

Tkinter使用旧式类。super()只能与新式类一起使用。

于 2013-08-11T11:16:20.927 回答