Kivy 中的 Widget 对象的动画无法按预期工作

2024-02-18

我在 Win7 64 上使用 Kivy 1.9.0 和 Python 2.7。
我正在尝试为小部件设置动画以从当前位置移动到特定位置。将 Widget 元素添加到屏幕后,我开始动画但没有任何反应,我期望 Widget 根据动画位置移动。这是代码:

projectile = Widget(pos=(self._posX + self._projectile_x, self._posY + self._projectile_y))
with projectile.canvas:
    Ellipse(pos=projectile.pos, size=(10,10))

self.add_widget(projectile)

anim = Animation(x=100, y=100)
anim.start(projectile)

小椭圆小部件不会移动,它只是出现在指定的坐标上。如果我用 for 例如替换小部件对象。 Button 对象动画正常工作。
您知道为什么会发生这种情况吗?
Thanks


因此,据我所知,在动态(代码方式)创建 Widget 对象时,Kivy 不会执行与 Button 或其他 Widget 更复杂类型相同的绑定。因此,解决方案可以是:
1:正如约阿斯所说用kv语言创建对象。这样做的缺点是它迫使你在 kv 中完成其余的事情以保持一致。将它们放在 kv 中的好处是 kivy 为您绑定所有属性。或者
2: 自己进行属性的绑定。缺点是您必须盲目地进行绑定,因为您永远不知道在不同情况下使用的那些属性是什么。

在我的特定情况下,我假设只有 pos 属性被更改,因为我使用了一个仅更改 Widget 位置的 Animation 对象。为了进行绑定,我为 Widget 创建了一个类,以便我可以更清楚地管理它。
AFTER:

class Projectile(Widget):

def __init__(self, pos, size):
    super(Projectile, self).__init__(pos=pos, size=size)
    with self.canvas:
        self.ellipse = Ellipse(pos=pos, size=size)

    self.bind(pos = self.updatePosition)

def updatePosition(self, *args):
    self.ellipse.pos = self.pos

然后我使用 Projectile 对象而不是我的默认 Widget:

proj = Projectile(pos=(self._posX + self._projectile_x, self._posY + self._projectile_y), size = (10, 10))

self.add_widget(proj)

animation = Animation(pos=(100, 100))
animation.start(proj)

现在效果很好,谢谢 Yoav 的提示

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kivy 中的 Widget 对象的动画无法按预期工作 的相关文章

随机推荐