python - 如何获取在kivy中动画的对象?
问题描述
问题:
- 如何获取在 Kivy 中动画的对象?
- 是否有可能获得动画对象?
代码:
from kivy.app import App
from kivy.animation import Animation
from kivy.uix.image import Image
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.screenmanager import ScreenManager, Screen
class ScreenOne(Screen):
def __init__(self, **kwargs):
super(ScreenOne, self).__init__(**kwargs)
self.img1 = Image(source="F:\PyCharm Python Works\Kivy Test\opencityicon (1).png")
box_layout = BoxLayout()
self.add_widget(box_layout)
box_layout.add_widget(self.img1)
def on_enter(self, *args):
animation = Animation(d=1, x=560)
animation.start(self.img1)
print(animation.animated_properties)
sm = ScreenManager()
sm.add_widget(ScreenOne(name='screen_one'))
sm.current = 'screen_one'
class Test(App):
def build(self):
return sm
if __name__ == '__main__':
Test().run()
我无法在 Kivy 的文档中找到我的问题的答案!
谢谢你的阅读!!
解决方案
这是 、 和 类的定制版本Animation
和Sequence
一个Parallel
简单的测试用例:
from kivy.animation import Animation, Sequence, Parallel
from kivy.app import App
from kivy.clock import Clock
from kivy.properties import ListProperty
from kivy.uix.button import Button
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.label import Label
class MySequence(Sequence):
widgets = ListProperty([])
def start(self, widget):
super(MySequence, self).start(widget)
self.widgets.append(widget)
def __add__(self, animation):
return MySequence(self, animation)
def __and__(self, animation):
return MyParallel(self, animation)
class MyParallel(Parallel):
widgets = ListProperty([])
def start(self, widget):
super(MyParallel, self).start(widget)
self.widgets.append(widget)
def __add__(self, animation):
return MySequence(self, animation)
def __and__(self, animation):
return MyParallel(self, animation)
class MyAnim(Animation):
widgets = ListProperty([])
def start(self, widget):
super(MyAnim, self).start(widget)
self.widgets.append(widget)
def __add__(self, animation):
return MySequence(self, animation)
def __and__(self, animation):
return MyParallel(self, animation)
class TestApp(App):
def animate(self, instance):
self.animation = MyAnim(pos=(200, 200), d=5)
self.animation.on_complete = self.completed
# sequential
# self.animation += MyAnim(pos=(400, 400), t='out_sine')
# parallel
self.animation &= MyAnim(size=(200, 300), d=5)
Clock.schedule_once(self.another_anim, 1)
self.animation.start(instance)
def another_anim(self, dt):
self.animation.start(self.label)
def completed(self, widget):
print('Animation completed - animated Widget:', widget)
Clock.schedule_once(self.check_anim, 2)
def check_anim(self, dt):
print(dt, 'seconds after Animation completed - animated Widgets:', self.animation.widgets)
def build(self):
fl = FloatLayout()
button = Button(size_hint=(None, None), size=(100,50), pos=(0,0), text='click here', on_press=self.animate)
fl.add_widget(button)
self.label = Label(text='label', size_hint=(None, None), size=(100, 500), pos=(400, 200))
fl.add_widget(self.label)
return fl
if __name__ == '__main__':
TestApp().run()
如果您使用它来代替Animation
,那么您可以访问widgets
动画列表Widgets
。
推荐阅读
- python - Pandas & Python:如何写入特定的 excel 行,而不替换其原始值
- c - 在 C 中关闭并重新打开 PDF
- scala - 如何使用scala将整数列表中的ApproxQuanitiles计算到Spark DataFrame列中
- java - maven依赖管理及传递依赖的版本变更
- tweepy - Tweepy 不返回转发推文的推文对象
- postgresql - Npgsql 能否与 Aurora PostgreSQL 一起正常工作
- dataframe - 如何在 pyspark 中获取结构化流数据帧的一行数据?
- automated-tests - 运行 Azure CLI 任务作为 Azure Devops YAML 管道的测试
- java - 带代理的 Http 客户端
- reactjs - 如何为我的 react 组件库包启用二级导入?