使用Kivy on_complete动画事件的递归?

时间:2014-12-23 15:08:35

标签: python-2.7 kivy

我正在尝试按顺序为10个小部件设置动画,每个动画应该按照之前的动画开始。不幸的是,我的解决方案在下面按顺序触发所有动画而不等待任何事情完成。

def Animate_Widget(self,index):
    if index < 10:
        anim = Animation(x = self.position[index][0], y = self.position[index][1], d=1)
        anim.bind(on_complete=self.Animate_Widget(index + 1))
        anim.start(self.ids['widget' + str(index)])

def Resize_Layout(self):
    self.Animate_Widget(0)

1 个答案:

答案 0 :(得分:4)

下面:

anim.bind(on_complete=self.Animate_Widget(index + 1))

您可以立即拨打电话。这是因为调用时会评估anim.bind的参数。相反,定义另一个函数或lambda来延迟可以在没有任何参数的情况下调用的调用:

def callback():
    self.Animate_Widget(index + 1)
anim.bind(on_complete=callback)

或者:

anim.bind(on_complete=lambda: self.Animate_Widget(index + 1))