尝试使用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()
答案 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一起使用。