TypeError: __init__() 得到了一个意外的关键字参数 '__no_builder' Kivy

Posted

技术标签:

【中文标题】TypeError: __init__() 得到了一个意外的关键字参数 \'__no_builder\' Kivy【英文标题】:TypeError: __init__() got an unexpected keyword argument '__no_builder' KivyTypeError: __init__() 得到了一个意外的关键字参数 '__no_builder' Kivy 【发布时间】:2017-10-08 10:27:26 【问题描述】:

我正在尝试将def __init__(self) 添加到我的代码中,当我运行 kivy 程序时,我得到了这个:

Traceback (most recent call last):
   File "/Users/acrobat/Desktop/dive/test.py", line 78, in <module>
     ''')
   File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/kivy/lang.py", line 1921, in load_string
     self._apply_rule(widget, parser.root, parser.root)
   File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/kivy/lang.py", line 2085, in _apply_rule
     self._apply_rule(child, crule, rootrule)
   File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/kivy/lang.py", line 2082, in _apply_rule
     child = cls(__no_builder=False)
 TypeError: __init__() got an unexpected keyword argument '__no_builder'

代码如下: def __init__(self)PlayerImage 类中,这是我试图在屏幕上移动的小部件

class PlayerImage(Image):
    angle = NumericProperty(0)

    def __init__(self):
        super().__init__()


    def on_touch_down(self, touch):
        # self.currentstate = self.states["person.zip/"]
        Animation.cancel_all(self)
        angle = degrees(atan2(touch.y - self.center_y,
                              touch.x - self.center_x))

        Animation(center=touch.pos, angle=angle).start(self)
        # self.currentstate = self.states["personred/rest.png/"]

我没有使用 kv lang 文件,所以这是我的构建代码:

root = Builder.load_string('''
Widget:
    Widget:
        PlayerImage:
            source: './rpgArt/person.zip'
            allow_stretch: True
            keep_ratio: True
        PlayerImage2:
            source: './rpgArt/personred.zip'
            allow_stretch: True
            keep_ratio: True
''')

编辑:添加 kivy 标签

【问题讨论】:

def __init__(self, **kwargs): super(PlayerImage, self).__init__(**kwargs) 试用时这是什么? (我的工作机器上没有 Kivy,但我怀疑您的子类中没有包含 **kwargs) 嘿,它有效,但我不能接受你的评论哈哈 【参考方案1】:

替换:

def __init__(self):
    super().__init__()

与:

def __init__(self, **kwargs): 
    super(PlayerImage, self).__init__(**kwargs)

您正在创建对象的子类,而没有传递 Kivy 所需的关键字参数。

我也不认为 Kivy 需要 __init__(),我认为它可能会自动从父母那里为您查找,但我不确定。

已编辑:就像 Kevin 在 cmets 中所说,因为您使用的是 Python 3,所以您可以使用 super() 的零参数,这同样有效。

【讨论】:

感谢您的帮助,如果有人问,我确实需要您 def __init__(...): 用于创建时的自定义属性。 既然我们在3.X,难道不能继续使用super的零参数形式吗?只是为了简洁。 @Kevin 没有读取标签,我以为只有 Python,你又是对的。

以上是关于TypeError: __init__() 得到了一个意外的关键字参数 '__no_builder' Kivy的主要内容,如果未能解决你的问题,请参考以下文章

TypeError: __init__() 得到了一个意外的关键字参数“编码”

TypeError: __init__() 得到了一个意外的关键字参数 '__no_builder' Kivy

TypeError:__init__() 得到了一个意外的关键字参数“categorical_features”:onehotencoder

sklearn.cluster.KMeans 得到“TypeError:__init__() 得到了一个意外的关键字参数‘n_jobs’”

Tensorflow 错误:TypeError:__init__() 得到了一个意外的关键字参数“dct_method”[关闭]

如何使用 keras 加载保存的模型? (错误: : TypeError: __init__() 得到了一个意外的关键字参数“可训练”)