在Kivy中尝试为速度计添加动画

3

我正在尝试让我的速度表上的指针从左移动到右。有没有函数可以制作动画?一个简单的函数或帮助就可以了。

kivy screen

.py文件

import kivy
from kivy.lang import Builder
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.app import App

class SpeedWindow(Screen):
    pass

class WindowManager(ScreenManager):
    pass

KV = """

WindowManager:
    SpeedWindow:

<SpeedWindow>:

    Image:
        source: 'cadran.png'
        size_hint: None, None
        size: 400, 400
        pos_hint: {'center_x': 0.5, 'center_y': 0.5}

    Image:
        source: 'needle.png'
        size_hint: None, None
        size: 300, 300
        pos_hint: {'center_x': 0.5, 'center_y': 0.5}

"""



class MyMainApp(App):
    def build(self):
        return  Builder.load_string(KV)

if __name__ == "__main__":
    MyMainApp().run()

你可以使用 RotateAnimation。请参见这个类似的应用程序。 - John Anderson
1个回答

3
使用 RotateAnimation,您可以像下面这样动画旋转指针:
from kivy.animation import Animation
from kivy.clock import Clock
from kivy.lang import Builder
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.app import App

class SpeedWindow(Screen):
    pass

class WindowManager(ScreenManager):
    pass

KV = """

WindowManager:
    SpeedWindow:

<SpeedWindow>:
    angle: 90    # angle for needle
    name: 'speedometer'    # every Screen needs a name

    Image:
        source: 'cadran.png'
        size_hint: None, None
        size: 400, 400
        pos_hint: {'center_x': 0.5, 'center_y': 0.5}

    Image:
        source: 'needle.png'
        size_hint: None, None
        size: 300, 300
        pos_hint: {'center_x': 0.5, 'center_y': 0.5}   
        # apply rotation matrix to this Image                                                                                                                                            
        canvas.before:                                                                                                                                             
            PushMatrix                                                                                                                                             
            Rotate:                                                                                                                                                
                angle: root.angle                                                                                                                                  
                axis: (0, 0, 1)                                                                                                                                    
                origin: (self.center_x, self.center_y - self.norm_image_size[1]/2, 0)                                                                                                                              
        canvas.after:                                                                                                                                              
            PopMatrix                           

"""



class MyMainApp(App):
    def build(self):
        Clock.schedule_once(self.animate_needle, 2.0)  # start the animation in 2 seconds
        return  Builder.load_string(KV)

    def animate_needle(self, dt):
        # animate the needle from +90 to -90 and then back to +90
        self.anim = Animation(angle=-90.0) + Animation(angle=90)
        self.anim.repeat = True    # repeat forever
        speedometer = self.root.get_screen('speedometer')
        self.anim.start(speedometer)

if __name__ == "__main__":
    MyMainApp().run()

谢谢!我可以知道PushMatrix和PopMatrix是用来做什么的吗? - Budaksesat2000
当我运行代码时,我遇到了一个错误 TypeError: must be real number, not NoneType kivy,它指向了 angle:root.angle - Budaksesat2000
你在<SpeedWindow>部分中包含了angle: 90吗? - John Anderson
我发布的代码是有效的。一定有其他因素影响了它。 - John Anderson
1
好的,我已经让它运行了...但是该怎么让它持续地从左到右并返回到左边呢? - Budaksesat2000
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接