我刚开始学习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
答案 0 :(得分:2)
Kivy Property
是一个类似于Python自己的property
的便利类,但它也提供了类型检查,验证和事件。 ObjectProperty
是Property
类的专用子类,因此它具有与它相同的初始化参数:
默认情况下,属性始终采用默认值[。]默认值 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())