我在尝试运行代码时收到此错误:
File "./countdown.py", line 36, in <module>
app = Application(root)
File "./countdown.py", line 16, in __init__
self.create_buttons(self)
TypeError: create_buttons() takes exactly 1 argument (2 given)
这是我的代码:
import Tkinter as tk
class Application(tk.Frame):
"""Countdown app - simple timer"""
def __init__(self, master):
"""initialize frame"""
tk.Frame.__init__(self, master)
#super(Application, self).__init__(master)
self.grid()
self.create_buttons(self)
def create_buttons(self):
self.startBttn = Button(app, text = "Start")
self.startBttn.grid()
self.stopBttn = Button(app, text = "Stop")
self.stopBttn.grid()
self.resetBttn = Button(app, text = "Reset")
self.resetBttn.grid()
### Main Code ###
# create the root window using Tk - an object of tkinter class
root = tk.Tk()
# modify the prog. window (set size, title, etc.)
root.title("Countdown")
root.geometry("200x100")
#instantiate Application
app = Application(root)
我一直在寻找这个问题的答案,但是还没有能够将其他人的解决方案应用到我的代码中 - 任何想法?如果我删除tk。在类应用程序声明中的Frame之前我收到一条错误,指出找不到Frame。如果我使用 super(应用程序,自我).__ init __(master)而不是上面的行,我得到的类型错误必须是class而不是class对象。
答案 0 :(得分:3)
调用绑定方法时,不要显式传递self
。这样称呼:
self.create_buttons()
通过使用self.create_buttons(self)
调用该方法,该函数接收两个参数:调用绑定方法时传递的隐式self
(Python自动执行此操作),以及您在方法调用中传递的显式self
。
create_buttons()
还存在一些其他问题,您可以使用此代码修复此问题:
def create_buttons(self):
self.startBttn = tk.Button(self, text = "Start")
self.startBttn.grid()
self.stopBttn = tk.Button(self, text = "Stop")
self.stopBttn.grid()
self.resetBttn = tk.Button(self, text = "Reset")
self.resetBttn.grid()
更改是您需要使用tk.Button
来引用Button
类,并将self
传递给tk.Button
,这是对父框架的引用。此处self
是Application
实例,它是tk.Frame
的子类 - 因此self
是一个框架。
最后,您需要添加对mainloop()
的调用:
#instantiate Application
app = Application(root)
root.mainloop()
关于super
的问题,tkinter类属于&#34;旧式&#34;输入并且不支持super()
。因此,您必须使用tk.Frame.__init__(self, master)
调用基类。
通过使用多重继承并包含object
作为基类,有一种解决方法。如果您将Application
声明为:
class Application(tk.Frame, object):
def __init__(self, master):
"""initialize frame"""
super(Application, self).__init__(master)
然后你可以使用super()
,但它几乎不值得努力。