简体   繁体   中英

How Can I Animate a Label in Kivy?

Ok, My question goes this way How Can I Animate a Label in Kivy , My apologies if this question is annoyingly way too easy :)

Here is the Label in which I want animation. Can I have edits of the code in the comments?

Actually, I am obsessed with this script, racking my brains off to know the way to animate this thingy!! Pls Help!..

import kivy
from kivy.app import App
from kivy.uix.label import Label

class MyApp(App):
    def build(self):
        lu = Label(text = "This is a label! Pls help me with Animation!")
        return lu

if __name__ == '__main__':
    MyApp().run()

If you want to update text on Label every few seconds then you can use Clock and Clock.schedule_interval(function_name, seconds) to execute function_name(dt) every seconds and in this function you should change text in Label


Minimal example which displays current time.

from kivy.app import App
from kivy.uix.label import Label
from kivy.clock import Clock
import datetime

def update_label(dt):
    new_text = datetime.datetime.now().strftime('%H:%M:%S') 
    label.text = new_text
    #print(new_text)
    
label = None  # create global variable to access the same `label` in two different functions 

class MyApp(App):
    def build(self):
        global label  # inform function to assign `Label` to global variable

        label = Label(text="???")
        Clock.schedule_interval(update_label, 1)

        return label

#Clock.schedule_interval(update_label, 1)

if __name__ == '__main__':
    MyApp().run()

EDIT:

Another example which scroll text

from kivy.app import App
from kivy.uix.label import Label
from kivy.clock import Clock
import datetime

label = None

text = 'Hello World of Python!'
text_length = len(text)

index = 0
temp_text = text + ' ' + text

def update_label(dt):
    global index
    
    label.text = temp_text[index:index+15]
    index += 1
    
    if index >= text_length:
        index = 0
    
class MyApp(App):
    def build(self):
        global label
        
        label = Label(text="???")
        Clock.schedule_interval(update_label, 0.20)
        
        return label

if __name__ == '__main__':
    MyApp().run()

EDIT:

For numerical values you can use Animation .

Here is blinking text.

It changes color to black (in 0.2 second) and next it change back to white (in 0.2 second). And it repeats it.

from kivy.app import App
from kivy.uix.label import Label
from kivy.animation import Animation
    
class MyApp(App):
    def build(self):

        label = Label(text='Hello World of Python!')

        anim = Animation(color=(0, 0, 0, 1), duration=.2) + Animation(color=(1, 1, 1, 1), duration=.2)
        anim.repeat = True
                
        anim.start(label)
            
        return label

if __name__ == '__main__':
    MyApp().run()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM