与基维类中的值绑定有关的问题

时间:2019-05-08 08:07:00

标签: python kivy

我已经定义了一个Root类,并在Root的 init 中定义了一个value(val)。当我尝试绑定到val时,出现错误“ KeyError:'val'”。

我已经创建了Root()的实例根,并尝试以这种方式绑定“ val”,同样的错误。我还尝试从实例根定义'val',然后将其绑定

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout

class Root(FloatLayout):
    def __init__(self,**kwargs):
        super(Root).__init__(**kwargs)
        self.val = 1
        self.bind(val=lambda x,y: print(y))

class TestApp(App):
    def build(self):
        return Root()

if __name__ == '__main__':
    TestApp().run()

我如何成功绑定到val?我在做什么错?

2 个答案:

答案 0 :(得分:0)

由于您也必须提交super参考,因此您似乎在错误地称self

应该是:

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

或者使用Python 3,您可以将其简化为:

super().__init__(**kwargs)

答案 1 :(得分:0)

在浏览了kivy文档之后,我意识到了自己的错误。应该在初始化之前使用kivy.property声明'val'

class Root(FloatLayout):
    val = NumericProperty(1)
    def __init__(self,**kwargs):
        super().__init__(**kwargs)
        self.bind(val=lambda x,y: print(y)) #: Prints 1

发布之前,我应该做更多的研究,但是无论如何,希望这对遇到同样问题的其他人有所帮助。