Python Kivy时钟更新

时间:2018-04-16 12:55:29

标签: python kivy clock

我在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类属性和方法添加到我的主app类。

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: '

这是我的应用程序的图片,其时间冻结只是为了直观地表示我正在尝试完成的任务: enter image description here

正如您所看到的,时间在0:09:59冻结,而不是按照我的预期更新。

我提前为长期问题道歉。我觉得尽可能详细是很重要的,这样就没有混乱。我在本网站上回答的最难的问题是那些缺乏任何形式细节的问题,如果没有某种形式的细节,很难准确地构建问题。

1 个答案:

答案 0 :(得分:0)

我能够解决自己的问题。我决定每次调用timer方法时使用 - = 1来增加我的时间,而不是-1。我还创建了一个调用“timer”函数的新方法。我决定将一个名为“Start Timer”的新Button绑定到此函数。按下此按钮时,它会启动“Clock.schedule_interval”方法,该方法允许时钟倒计时。看起来似乎从秒减去 - = 1而不是减去-1是使这项工作的关键。以下是我在下面所做的更改:

def timer(self, *args):

    self.seconds -= 1

    if self.seconds == -1:
        self.seconds += 60
        self.minutes -= 1

    self.time = datetime.timedelta(minutes=self.minutes, seconds=self.seconds)
    self.root.ids.time.text = str(self.time)

    if '-1 day' in str(self.time):
        self.root.ids.time.text = 'Time Over!'
#--------------------------------------------------------------------------------------------------------------

def start_timer(self):
    Clock.schedule_interval(self.timer, 1)

这是我在.kv文件中添加的按钮,用于触发“start_timer”方法,该方法将使用kivy时钟调用timer方法。

Button:
    text: 'Start Timer'
    id: easy_addition_timer_button
    background_normal: 'navy.png'
    on_press: app.start_timer()