You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kivy Clock库倒计时计时器冻结问题求助

解决Kivy Clock倒计时停在09:59的问题

嘿,我之前做游戏倒计时的时候也踩过几乎一模一样的坑!你的问题核心肯定是回调逻辑里的时间更新逻辑没处理到位——只想着减秒数,但没处理秒归零时的分钟递减,或者Clock的重复调度没配置对。我给你补全并修正代码,顺便把关键坑点给你掰明白:

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

class AddNumbers(Screen):
    def __init__(self, **kwargs):
        super(AddNumbers, self).__init__(**kwargs)
        self.minutes = 10
        self.seconds = 0
        
        # 先创建显示时间的Label并加到屏幕上
        self.timer_label = Label(text=self.format_time(), font_size=40)
        self.add_widget(self.timer_label)
        
        # 启动Clock,每秒调用一次更新逻辑
        self.clock_event = Clock.schedule_interval(self.update_timer, 1)

    def format_time(self):
        # 强制格式化为两位数字的MM:SS,避免显示成9:59这种不统一的样式
        return f"{self.minutes:02d}:{self.seconds:02d}"

    def update_timer(self, dt):
        # 第一步先减秒数
        self.seconds -= 1
        
        # 处理秒数变负的情况:分钟减1,秒数重置为59
        if self.seconds < 0:
            self.minutes -= 1
            self.seconds = 59
            
            # 当分钟也减到负数时,停止倒计时并提示结束
            if self.minutes < 0:
                self.clock_event.cancel()
                self.timer_label.text = "时间到!"
                return
        
        # 最后更新Label的显示文本
        self.timer_label.text = self.format_time()

class MyApp(App):
    def build(self):
        return AddNumbers()

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

你之前踩的关键坑点:

  • 没处理秒数归零时的分钟递减:初始10:00,第一次减秒后秒变成-1,这时候如果没把分钟减1、秒重置为59,时间就会卡在09:59不动
  • 可能没正确启动重复调度:如果只调用了一次Clock.schedule_once,那只会更新一次就停了,必须用schedule_interval来每秒触发一次
  • 缺少倒计时结束的停止逻辑:不然时间会一直往负数走,得用保存的clock_event来取消调度

内容的提问来源于stack exchange,提问作者Simeon Ikudabo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:24:20