Jumat, 10 Oktober 2025

PYTHON - KIVY - import Animation

 





# work same as kivy.App used to run the App

from kivy.base import runTouchApp


# to use .kv file as a string we have to import it

from kivy.lang import Builder


# A Widget is the base building block of GUI interfaces in Kivy

from kivy.uix.widget import Widget


# The Clock object allows you to schedule a

# function call in the future

from kivy.clock import Clock


# Animation and AnimationTransition are

# used to animate Widget properties

from kivy.animation import Animation


# The Properties classes are used when

# you create an EventDispatcher.

from kivy.properties import ListProperty


# Core class for creating the default Kivy window. 

from kivy.core.window import Window


# As name suggest used when random things required

from random import random



# load the kv file as string 

Builder.load_string('''

<Root>:


# Setting the position (initial) of boxes


    ClockRect:

        pos: 300, 300

    AnimRect:

        pos: 500, 300


# creation and animation of red box

<ClockRect>:

    canvas:

        Color:

            rgba: 1, 0, 0, 1

        Rectangle:

            pos: self.pos

            size: self.size


# creation and animation of red box

<AnimRect>:

    canvas:

        Color:

            rgba: 0, 1, 0, 1

        Rectangle:

            pos: self.pos

            size: self.size

''')



# Create the root class

class Root(Widget):

    pass



# Create the clock class Then is when clicked

# how much time to animate

# the red colour block animation is created by it

class ClockRect(Widget):

    velocity = ListProperty([10, 15])


    def __init__(self, **kwargs):

        super(ClockRect, self).__init__(**kwargs)

        Clock.schedule_interval(self.update, 1 / 60.)


    def update(self, *args):

        self.x += self.velocity[0]

        self.y += self.velocity[1]


        if self.x < 0 or (self.x + self.width) > Window.width:

            self.velocity[0] *= -1

        if self.y < 0 or (self.y + self.height) > Window.height:

            self.velocity[1] *= -1



# Create the Animation class

# And add animation

# green colour box is animated through this class

class AnimRect(Widget):

    

    def anim_to_random_pos(self):

        Animation.cancel_all(self)

        random_x = random() * (Window.width - self.width)

        random_y = random() * (Window.height - self.height)


        anim = Animation(x = random_x, y = random_y,

                         duration = 4,

                         t ='out_elastic')

        anim.start(self)


    def on_touch_down(self, touch):

        if self.collide_point(*touch.pos):

            self.anim_to_random_pos()


# run the App

runTouchApp(Root())

Tidak ada komentar: