回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有一个自定义小部件,用于显示我的Kivy应用程序中的错误:</p>
<pre><code>class ErrorWidget(Widget):
def __init__(self, **kwargs):
super(ErrorWidget, self).__init__(self, **kwargs)
with self.canvas:
Color(255/255.0, 99/255.0, 71/255.0)
Rectangle(pos=((Window.size[0] / 2)-150,(Window.size[1] / 2)+200),
size=(300,50))
...
...
class MainApp(App)
def on_start(self):
self.error_popup = ErrorWidget()
...
...
</code></pre>
<p>当我运行此命令时,我得到:</p>
<pre><code> Traceback (most recent call last):
File "main.py", line 228, in <module>
MainApp().run()
File "/home/mark/front_end_android/venv/lib/python3.8/site-packages/kivy/app.py", line 949, in run
self._run_prepare()
File "/home/mark/front_end_android/venv/lib/python3.8/site-packages/kivy/app.py", line 944, in _run_prepare
self.dispatch('on_start')
File "kivy/_event.pyx", line 709, in kivy._event.EventDispatcher.dispatch
File "main.py", line 93, in on_start
self.error_popup = ErrorWidget()
File "main.py", line 50, in __init__
super(ErrorWidget, self).__init__(self)
TypeError: __init__() takes 1 positional argument but 2 were given
</code></pre>
<p>我怎么给它两个论点?我可以看到在<code>on_start</code>方法中我没有传递任何可选参数。这个<code>**kwargs</code>就在那里,以防我将来改变主意</p>
<p><strong>更新:</strong></p>
<p>我创建了最简单的示例,但这是有效的:</p>
<pre><code>class ErrorWidget(Widget):
def __init__(self, **kwargs):
super(ErrorWidget, self).__init__(**kwargs)
with self.canvas:
Color(255/255.0, 99/255.0, 71/255.0)
Rectangle(pos=((Window.size[0] / 2)-150,(Window.size[1] / 2)+200),
size=(300,50))
class MainApp(app):
def build(self):
return ErrorWidget()
if __name__ == '__main__':
MainApp().run()
</code></pre>