【发布时间】:2018-04-16 12:55:28
【问题描述】:
我在 Kivy 中遇到了 Clock 库的问题。我正在尝试为游戏创建倒数计时器。我为计时器设置的默认时间是 10:00 分钟。每一秒,我都想在 Kivy 中更新一个显示时间的标签,但时钟似乎在 09:59 分钟被冻结,并且将停止更新。这是我到目前为止所做的。
class AddNumbers(Screen):
def __init__(self, **kwargs):
super(AddNumbers, self).__init__(**kwargs)
self.minutes = 10
self.seconds = 0
在我的第一堂课中,我添加了分钟和秒的属性,以便将默认分钟设置为 10,将默认秒设置为 0。
接下来,我将 AddNumbers 类属性和方法添加到我的主应用程序类中。
class MinuteMathApp(App, AddNumbers):
在我的主应用程序类中,我添加了一个名为“timer”的方法,每次调用此函数时都应从 self.seconds 中减去 -1。一旦 self.seconds == 到 -1,self.minutes 将减少 1,self.seconds 应增加 += 60,以便它可以在 59 秒处重新开始,并再次开始倒计时。如果分钟和秒 == 0,那么我会将时间冻结在 00:00。我创建了一个 datetime.timedelta 对象,其中分钟设置为 self.minutes,秒设置为 self.seconds。然后我用时间的字符串形式更新我的 kivy 标签。
def timer(self, *args):
self.seconds - 1
if self.seconds == -1:
self.seconds += 60
self.minutes -= 1
if self.minutes == 0 and self.seconds == 0:
self.minutes = 0
self.seconds = 0
self.time = datetime.timedelta(minutes=self.minutes, seconds=self.seconds)
self.root.ids.time.text = str(self.time)
最后,我有一个名为 addnums 的函数,它绑定到 kivy 中的一个 Button。当用户按下这个按钮时,他们会被问到一系列数学问题,这就是计时器应该开始的地方。我使用 Clock.schedule_interval 函数安排定时器函数每秒运行一次。由于我的函数中有 self.seconds - 1,我的想法是,每次使用 Clock.schedule_interval 函数调用该函数时,该函数都会减去 1 秒。但是,我的问题是时间在 10:00 冻结,并且在我的 kivy 标签上没有改变。
def addnums(self):
Clock.schedule_interval(self.timer, 1)
这是我的 .kv 代码中与被调用的函数相对应的部分。
Button:
text: 'Get Question'
id: easy_addition_next_question_button
background_normal: 'navy.png'
on_press: app.addnums()
这是我在 .kv 文件中应该更新的标签:
Label:
id: time
text: 'Time: '
这是我的应用程序的图片,其中时间冻结只是为了直观地表示我正在尝试完成的工作:
如您所见,时间被冻结在 0:09:59,并没有像我预期的那样更新。
对于这个冗长的问题,我提前道歉。我觉得尽可能详细很重要,这样就不会造成混淆。我在这个网站上最难回答的问题是那些缺乏任何形式的细节的问题,如果没有某种形式的细节,很难准确地构建一个问题。
【问题讨论】: