【发布时间】:2016-05-01 14:37:41
【问题描述】:
在允许启动它的代码继续之前,我如何才能等待 kivy 动画完成?例如,以下方法更新小部件位置:
def update_actor_widget(self, actor):
final = self._get_screen_pos(actor.location)
a = Animation(x=final[0], y=final[1], duration=0.5)
a.start(actor.widget)
我不希望它在 actor 实际上是它所属的位置之前返回(因此可能允许其他动画开始)。使用 time.sleep() 只是完全挂起应用程序。使用Animation.on_complete 确实会在动画完成时安排一些事情发生,但不会阻止调用动画的函数的执行。
【问题讨论】:
-
尝试使用时钟对象来安排动画。 kivy.org/docs/api-kivy.clock.html?highlight=clock
-
谢谢。一般来说,它并不能真正回答我的问题,但它可以解决我遇到的问题。如果您将您的评论改写为答案,我很乐意接受。
-
我自己不确定我是否完全理解你的问题,只是把它放在这里以防万一它可能有帮助,这不是一个真正的答案。如果您设法使用 kivy Clock 对象解决了您的问题,请将其发布为答案:)。
-
好吧,事实证明我并没有真正解决我的问题。我已经构建了类似此处所述的顺序动画stackoverflow.com/questions/27623010/…,但在动画完成之前我仍然无法禁用其余代码。我试图创建一个跟踪动画状态的布尔值(在
on_start中设置 True 并在on_complete中设置 False 并在它为 True 时禁用输入),但由于某些奇怪的原因,即使动画明显运行,它也会保持 False . -
如果你不想在动画之后运行一些代码,你可以安排它,因为你知道动画需要多长时间。