基维简单倒计时分秒计时

2024-09-30 22:18:27 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我想建立一个kivy程序,基本上只需要倒计时几分钟和几秒钟。在

我已经走了这么远:

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

from datetime import datetime, date, time


class IncrediblyCrudeClock(Label):
    a = time(0, 1, 1)

    def update(self, *args):
        self.text = str(self.a)
        print(str(self.a))

        self.a = datetime.combine(date.today(), self.a) - datetime.combine(date.today(), time(0,0,1))

class TimeApp(App):
    def build(self):
        crudeclock = IncrediblyCrudeClock()
        Clock.schedule_interval(crudeclock.update, 1)
        return crudeclock

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

问题是,当我试图从新时间中扣除旧时间时,显示的时间少了1秒,我得到了以下错误:

^{pr2}$

这让我想到,在第一次sustraction之后,a现在不再是“时间”对象,而是一个“timedelta”,不幸的是,它不能被扣除。在

任何帮助都太好了!在


Tags: fromimportselfappdatetimedatetimedef
1条回答
网友
1楼 · 发布于 2024-09-30 22:18:27

如果你只需要倒计时,有一种更简单的方法。您可以使用kivy的Animation类,该类由@inclement on youtube进行了很好的描述。 这是密码(主.py以及时间.kv)公司名称:

主.py

from kivy.app import App
from kivy.uix.label import Label
from kivy.animation import Animation
from kivy.properties import StringProperty, NumericProperty


class IncrediblyCrudeClock(Label):
    a = NumericProperty(5)  # seconds

    def start(self):
        Animation.cancel_all(self)  # stop any current animations
        self.anim = Animation(a=0, duration=self.a)
        def finish_callback(animation, incr_crude_clock):
            incr_crude_clock.text = "FINISHED"
        self.anim.bind(on_complete=finish_callback)
        self.anim.start(self)

class TimeApp(App):
    def build(self):
        crudeclock = IncrediblyCrudeClock()
        crudeclock.start()
        return crudeclock

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

时间.kv

^{pr2}$

享受吧!:)


更新:

OP要求一个没有kv文件的解决方案,所以这里有一个:

from kivy.app import App
from kivy.uix.label import Label
from kivy.animation import Animation
from kivy.properties import StringProperty, NumericProperty


class IncrediblyCrudeClock(Label):
    a = NumericProperty(5)  # seconds

    def start(self):
        Animation.cancel_all(self)  # stop any current animations
        self.anim = Animation(a=0, duration=self.a)
        def finish_callback(animation, incr_crude_clock):
            incr_crude_clock.text = "FINISHED"
        self.anim.bind(on_complete=finish_callback)
        self.anim.start(self)

    def on_a(self, instance, value):
        self.text = str(round(value, 1))

class TimeApp(App):
    def build(self):
        crudeclock = IncrediblyCrudeClock()
        crudeclock.start()
        return crudeclock

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

相关问题 更多 >