【发布时间】:2022-01-01 22:15:43
【问题描述】:
我在 kivy 中有一个自定义小部件 PlaylistView,它应该将另一个自定义小部件作为其 init 方法的参数:
class PlaylistView(Widget):
def __init__(self, node, **kwargs): # (originally:) node: GridNode,... (custom node, removed for min. reproducable exmple but still yields the same error)
super().__init__(**kwargs)
self.node = node
...
但每当我尝试创建它的实例时,例如:PlaylistView(1)、PlaylistView(GridNode('test')) 或 PlaylistView("test")(无论我作为参数传递什么),我都会收到以下错误:
Traceback (most recent call last):
File "C:/Users/Maximilian.Wolf/PycharmProjects/MiaudioPyler/main.py", line 215, in <module>
PlaylistView("test")
File "C:/Users/Maximilian.Wolf/PycharmProjects/MiaudioPyler/main.py", line 157, in __init__
super().__init__(**kwargs)
File "C:\Users\Maximilian.Wolf\Miniconda3\envs\MiaudioPyler\lib\site-packages\kivy\uix\widget.py", line 359, in __init__
self.apply_class_lang_rules(
File "C:\Users\Maximilian.Wolf\Miniconda3\envs\MiaudioPyler\lib\site-packages\kivy\uix\widget.py", line 463, in apply_class_lang_rules
Builder.apply(
File "C:\Users\Maximilian.Wolf\Miniconda3\envs\MiaudioPyler\lib\site-packages\kivy\lang\builder.py", line 541, in apply
self._apply_rule(
File "C:\Users\Maximilian.Wolf\Miniconda3\envs\MiaudioPyler\lib\site-packages\kivy\lang\builder.py", line 663, in _apply_rule
self._apply_rule(
File "C:\Users\Maximilian.Wolf\Miniconda3\envs\MiaudioPyler\lib\site-packages\kivy\lang\builder.py", line 659, in _apply_rule
child = cls(__no_builder=True)
TypeError: __init__() missing 1 required positional argument: 'node'
我也尝试在 init 中使用node=None,结果相同。
这可能与 kivy 或我如何称呼 super().__init__ 有关吗?
编辑
我单独尝试了这个,它有效,仍然不知道是什么导致了错误。
from kivy.uix.widget import Widget
class PlaylistView(Widget):
def __init__(self, node, **kwargs):
super().__init__(**kwargs)
self.node = node
PlaylistView(1)
编辑 2
更多信息:
我在示例中所做但未显示的是使用Builder.load_file(.. 加载一堆kv 文件。将其注释掉也会使错误消失。
【问题讨论】:
-
您是否尝试过使用
super().__init__(node, **kwargs)? -
是的,但这是一个意外的论点。我不想将它传递给 Widget 类,它的构造函数没有那个参数,所以如果我这样做,我会得到:
TypeError: __init__() takes 1 positional argument but 2 were given -
您未向我们展示的代码有问题。我们不知道是什么,因为你没有给我们看。发布minimal reproducible example。
-
原码和第一次编辑有什么区别?我没看到。
-
编辑 2 中的代码在编辑 1 中丢失。
标签: python kivy initialization arguments init