python - 如何在 Kivy 中一次启动多个动画?
问题描述
目标:
- 一次启动多个动画。
预期结果:
- 立即定义和启动的所有动画都必须并行运行。
实际结果:
- 唯一开始的动画首先显示,下面的动画甚至没有开始。
参考代码:
class KivySplash(Screen):
def __init__(self, **kwargs):
super(KivySplash, self).__init__(**kwargs)
anim1 = MyAnimation(duration=4, opacity=0)
anim1.bind(on_complete=self.on_anim1_complete)
self.animation = MyAnimation(duration=3) + MyAnimation(duration=4, opacity=1) + MyAnimation(duration=5) + anim1
self.img1 = Image(source=os.path.join(original_dir, "Kivy-logo-black-512.png"), opacity=0)
self.img2 = Image(source=os.path.join(original_dir, "python-powered-w-200x80.png"))
self.label1 = Label(text="Powered by:", font_size=48)
box_layout = BoxLayout(orientation="vertical")
box_layout1 = BoxLayout()
box_layout.add_widget(self.label1)
box_layout1.add_widget(self.img1)
box_layout1.add_widget(self.img2)
box_layout.add_widget(box_layout1)
self.add_widget(box_layout)
def on_anim1_complete(self, *args):
do_nothing(self, *args)
if self.img1 in self.animation.animated_widgets:
pass
def on_enter(self, *args):
self.animation.start(self.img1)
self.animation.start(self.img2)
感谢您。
解决方案
我相信你在 kivy 中遇到了一个错误Animation
。如果您只是使用简单的Animation
,那么Animation
在多个上启动它Widgets
应该可以正常工作。当您使用Sequence
(Animations
与 '+' 连接) 时会发生该错误。Sequences
通过运行第一个Animation
并绑定一个内部on_complete
方法来工作,该方法Animation
在Sequence
. 当您调用 时start
,该on_complete
方法被绑定。但是一旦第一个中Animation
的第一个完成,第二个就会启动并且该方法是未绑定的。现在,当第二个的第一个完成时,未调用(在第一个之后未绑定Widget
Sequence
Animation
on_complete
Animation
Widget
on_complete
Widget
完成),第二个Animation
没有开始。
这是来自的代码Sequence
:
def on_anim1_complete(self, instance, widget):
self.anim1.unbind(on_complete=self.on_anim1_complete)
self.anim2.start(widget)
在您的情况下,看起来 theAnimation
不是从 second 开始的Widget
,但是因为您的 firstAnimation
实际上并没有为任何东西设置动画,所以您看不到它。
不幸的是,没有很多替代方法可以避免这个问题。
- 您可以第二次构建整个副本
Animation
(copy()
或deepcopy()
不起作用),并且只使用两个不同的动画(每个动画一个Widget
)。 - 您可以使用 simple 进行自己的排序,
Animations
然后使用您自己on_complete
的开始下一个Animation
. 方便的是,参数包括下一次调用on_complete
所需的动画小部件。start()
- 在某些情况下,您可以为单个容器(如 a
Layout
)设置动画。由于这只是对单个 进行动画Widget
处理,因此排序应该可以正常工作。
推荐阅读
- wildfly - 您可以在wildfly 上为microprofile-health 端点配置端口吗?
- zsh - Zsh - 完全删除当前/上一个参数
- list - 创建所有可能的地图
> 从列表中 - javascript - Split a string on a capital letter or numbers
- python - 仅显示一个元素的绘图图例
- python - python根据属性跳过单元测试
- python - Python中的抽象类,添加有和没有实现的方法是否错误
- google-analytics - 如果我使用屏蔽 URL,我如何分隔同一域的 Google Analytics?
- c++ - 如何使用 CMake 将 C++ 编译为 CUDA
- excel - 尝试读取 Comment 属性时出现运行时错误 438