我正在尝试制作一个表单应用程序,但我不明白错误:
TypeError: object.__init__() takes exactly one argument (the instance to initialize)
Run Code Online (Sandbox Code Playgroud)
代码在这里;
class Myapp(App):
def build(self):
return Grid1()
class Grid1(GridLayout):
def __init__(self,**kwargs):
super(Grid1,self).__init__(**kwargs)
self.cols=1
self.inside=GridLayout()
self.inside.cols=2
self.inside.add_widget(Label(text="Your name is :"))
self.name=TextInput(multiline=False)
self.inside.add_widget(self.name)
self.inside.add_widget(Label(text="Your Last name is :"))
self.lastname=TextInput(multiline=False)
self.inside.add_widget(self.lastname)
self.inside.add_widget(Label(text="Your email is :"))
self.email=TextInput(multiline=False)
self.inside.add_widget(self.email)
self.submit=Button(text="Submit",font=40)
self.add_widget(self.submit)
if __name__=="__main__":
Myapp().run()
Run Code Online (Sandbox Code Playgroud)
File ".\kivyprima.py", line 38, in <module> Myapp().run()
File "C:\Users\Alex\AppData\Local\Programs\Python\Python37\lib\site-packages\kivy\app.py", line 829, in run root = self.build()
File ".\kivyprima.py", line 10, in build return Grid1()
File ".\kivyprima.py", line 34, in init self.submit=Button(text="Submit",font=40)
File "C:\Users\Alex\AppData\Local\Programs\Python\Python37\lib\site-packages\kivy\uix\behaviors\button.py", line 121, in init
Run Code Online (Sandbox Code Playgroud)
Esd*_*ier 13
好的,所以错误实际上不在您的super(Grid1,self).__init__(**kwargs)语句中,而是在Submit按钮的创建中。你做到了:
self.submit = Button(text="Submit", font=40)
self.add_widget(self.submit)
Run Code Online (Sandbox Code Playgroud)
但正如文档所说,字体大小由font_size而非设置font。代码应该是:
self.submit = Button(text="Submit", font_size=40)
self.add_widget(self.submit)
Run Code Online (Sandbox Code Playgroud)
这应该工作得很好。
只想感谢@chepner 指出这一点:
请注意,问题在于,Button(或其他任何人)无法识别的字体只是沿链向上传递,直到最终传递到
object.__init__(这会引发错误,而不是简单地忽略意外参数)。