我想了解更多关于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()
答案 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
),然后当其值更改时,将调用它具有绑定的所有回调。