初始化小部件的正确方法是什么?

2024-10-02 00:26:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个自定义小部件,用于显示我的Kivy应用程序中的错误:

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()
...
...

当我运行此命令时,我得到:

 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

我怎么给它两个论点?我可以看到在on_start方法中我没有传递任何可选参数。这个**kwargs就在那里,以防我将来改变主意

更新:

我创建了最简单的示例,但这是有效的:

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()

Tags: runinpyselfsizeinitondef
2条回答

更改:

super(ErrorWidget, self).__init__(self, **kwargs)

致:

super(ErrorWidget, self).__init__(**kwargs)

调用super时不应包含self参数,它是为您提供的。如果包含self,则它将显示为一个额外参数

super(ErrorWidget, self).__init__(self)
 TypeError: __init__() takes 1 positional argument but 2 were given

此错误意味着__init__不需要您传递的位置参数self。这是因为参数是错误的,您不需要或不想在这个调用中传递self

相关问题 更多 >

    热门问题