首页 > 解决方案 > 如何在 Kivy 中为标签设置动画?

问题描述

好的,我的问题是这样的我如何在 Kivy 中为标签设置动画,如果这个问题太简单了,我很抱歉:)

这是Label我想要动画的地方。我可以在评论中编辑代码吗?

实际上,我对这个脚本很着迷,绞尽脑汁想知道如何为这个东西制作动画!!请帮忙!..

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()

标签: pythonanimationkivylabel

解决方案


如果您想Label每隔几秒更新一次文本,那么您可以使用 ClockClock.schedule_interval(function_name, seconds)执行function_name(dt)每个seconds,在此函数中您应该更改文本Label


显示当前时间的最小示例。

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()

编辑:

滚动文本的另一个例子

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()

编辑:

对于数值,您可以使用Animation

这是闪烁的文字。

它将颜色变为black(在 0.2 秒内),然后又变回white(在 0.2 秒内)。它重复它。

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()

推荐阅读