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