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
相关产品推荐
相关产品推荐

