[英]TypeError: __init__() missing 1 required positional argument: 'to'
[英]__init__ method missing positional argument even though it is clearly passed
我在 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(..
编辑:看起来不导入可能导致错误
看起来 super 可能缺少所需的位置参数,因为在调用 super 时错误发生在第 157 行。 Here's the documentation for the widget class: https://kivy.org/doc/stable/api-kivy.uix.widget.html As seen by this post it doesn't look like Widget requires node as an argument: https:/ /stackoverflow.com/a/51012327/13297560
我会尝试的一件事是做 PlaylistView(node="test"),但这可能会也可能不会。
尝试做:
def __init__(self, node):
super(Widget, self).__init__()
回溯必须从上到下读取。 错误是文件“C:\Users\Maximilian.Wolf\Miniconda3\envs\MiaudioPyler\lib\site-packages\kivy\lang\builder.py”,第 659 行。
child = cls(__no_builder=True)
正在触发错误。 由于 kivy 使用工厂,因此不清楚是什么导致了错误,但该调用中缺少参数,而不是您对super().__init__
的调用。
您还应该在签名中包含*args
并调用 super:工厂可以使用 function 签名。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.