Python 如何重新启动Kivy动画

Python 如何重新启动Kivy动画,python,kivy,Python,Kivy,我正在尝试创建一个简单的倒计时计时器,我想能够重新启动它的按钮点击,现在它不会启动其他,我只是不能得到它的权利。我错过了什么 千伏 <RootWidget>: #:import randint random.randint orientation: "vertical" CountDownLbl: id: anim_label text: "{0:.3f}".format(float(s

我正在尝试创建一个简单的倒计时计时器,我想能够重新启动它的按钮点击,现在它不会启动其他,我只是不能得到它的权利。我错过了什么

千伏

<RootWidget>:
    #:import randint  random.randint
    orientation: "vertical"
    CountDownLbl:
        id: anim_label
        text: "{0:.3f}".format(float(self.startCount - self.angle / 360))
        font_size: 30
        canvas:
            Color:
                rgb: 0,1,0
            Line:
                circle:self.center_x, self.center_y, 90, 0, self.angle % 360
                width: 30
    Button:
        size_hint_y: 0.1
        text: "Start"
        on_press: anim_label.start()

问题在于,第一个动画将
angle
属性设置为
360
,而进一步的动画尝试再次将
angle
属性设置为
360
,这导致没有实际的动画。修复方法是在每次动画后增加
计数,如下所示:

def start(self):
    global COUNT
    self.startCount = COUNT
    self.anim = Animation(angle=360 * self.startCount,  duration=self.startCount)
    self.in_progress = True
    self.anim.start(self)
    COUNT += 1

回答我自己的问题,约翰很荣幸

谢谢,我是约翰·安德森。这是最终版本。最重要的是,我正在更新函数中的文本,而不是在KV中进行更新,第二个增量必须是计时器值,而不是1。最新的例子可以在这里找到

代码

千伏

def start(self):
    global COUNT
    self.startCount = COUNT
    self.anim = Animation(angle=360 * self.startCount,  duration=self.startCount)
    self.in_progress = True
    self.anim.start(self)
    COUNT += 1
TIMER_DURATION = 5

class CountDownLbl(Label):
    angle = NumericProperty(0)
    timer_duration = NumericProperty(0)

    def __init__(self, **kwargs):
        super(CountDownLbl, self).__init__(**kwargs)
        self.anim_duration = self.timer_duration
        self.in_progress = False

    def start(self):
        if not self.in_progress:
            self.anim = Animation(angle=360 * self.anim_duration,  duration=self.timer_duration)
            self.in_progress = True
            self.anim.bind(on_complete=self.finish, on_progress=self.update_timer)
            self.anim.start(self)
            self.anim_duration += TIMER_DURATION

    def finish(self, animation, widget):
        widget.text = "FINISHED"
        self.in_progress = False

    def update_timer(self, animation, widget, progression):
        text = ((self.timer_duration * 60000)*(1-progression))/60000
        widget.text = "{0:.3f}".format(float(text))
CountDownLbl:
    id: anim_label
    timer_duration: 5                 
    font_size: 30           
    text: "{}.000".format(self.timer_duration)
    canvas:
        Color:                                                                                                     
            rgb: 0,1,0                                                                                             
        Line:                                  
            circle:self.center_x, self.center_y, 90, 0, self.angle % 360
            width: 30