ObjectProperty类的用法

时间:2013-09-02 21:10:06

标签: python kivy

我刚开始学习kivy,我对ObjectProperty类的用法非常困惑,以及它如何将None作为参数。有人可以解释一下吗?我在kivy教程中找到了它:

class PongGame(Widget):
    ball = ObjectProperty(None)

    def update(self, dt):
        self.ball.move()

        # bounce off top and bottom
        if (self.ball.y < 0) or (self.ball.top > self.height):
            self.ball.velocity_y *= -1

        # bounce off left and right
        if (self.ball.x < 0) or (self.ball.right > self.width):
            self.ball.velocity_x *= -1

1 个答案:

答案 0 :(得分:2)

Kivy Property是一个类似于Python自己的property的便利类,但它也提供了类型检查,验证和事件。 ObjectPropertyProperty类的专用子类,因此它具有与它相同的初始化参数:

  

默认情况下,属性始终采用默认值[。]默认值   value必须是与Property类型一致的值。例如,   你不能将列表设置为StringProperty,因为StringProperty   将检查默认值。

     

无特殊情况:您可以将属性的默认值设置为   没有,但是之后你不能将None设置为属性。如果你真的   想要这样做,你必须使用allownone = True [。]

声明属性

(来自Kivy Property documentation

在您的代码中,PongGame具有ball属性,该属性最初设置为None,稍后将分配一个球对象。这在kv文件中定义:

<PongGame>:
    ball: pong_ball

    PongBall:
        id: pong_ball
        center: self.parent.center

由于没有对象传递给初始化器,因此可以将任何对象分配给该属性。您可以通过使用虚拟值初始化它来限制它仅保持球对象:

ball = ObjectProperty(PongBall())
相关问题