Reputation: 371
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()
I am not able find a answer for my question in the docs of Kivy!
Upvotes: 2
Views: 239
Reputation: 39012
Here is a customized version of the Animation
, Sequence
, and Parallel
classes and a simple test case:
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()
If you use this in place of Animation
, then you can access the widgets
list of animated Widgets
.
Upvotes: 3