了解猕猴桃中的绑定

时间:2019-06-22 19:49:28

标签: python kivy

我想了解更多关于bind方法的信息

我不知道为什么该代码不起作用,(我将问题简化为这个,以帮助我理解原因),非常感谢您的宝贵时间

data.frame
from kivy.app import App
from kivy.uix.gridlayout import GridLayout


class Game(GridLayout):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.a = 0

        self.bind(a=self.f)

    def f(self, *args):
        print("ok")


class TestApp(App):
    def build(self):
        self.game = Game()
        return self.game


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

1 个答案:

答案 0 :(得分:0)

如果对docs进行了审核:

  

绑定(** kwargs)
  将事件类型或属性绑定到回调

(添加了重点)

如前所述,它由与类的属性不同的属性指示。

因此,以您的代码为基础并添加功能以每秒更改一次值:

from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.properties import NumericProperty
from kivy.clock import Clock

class Game(GridLayout):
    a = NumericProperty(0)

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

        self.bind(a=self.f)

    def f(self, *args):
        print("ok")


class TestApp(App):
    def build(self):
        Clock.schedule_interval(self.foo, 1)
        self.game = Game()
        return self.game

    def foo(self, dt):
        self.game.a += 1


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

为什么使用Properties

因为该类型的属性存储了关联的回调(例如,在示例中为可调用f),然后当其值更改时,将调用它具有绑定的所有回调。