【问题标题】:Python Kivy Clock UpdatePython Kivy 时钟更新
【发布时间】: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,并没有像我预期的那样更新。

对于这个冗长的问题,我提前道歉。我觉得尽可能详细很重要,这样就不会造成混淆。我在这个网站上最难回答的问题是那些缺乏任何形式的细节的问题,如果没有某种形式的细节,很难准确地构建一个问题。

【问题讨论】:

    标签: python kivy clock


    【解决方案1】:

    我能够解决我自己的问题。我决定每次调用 timer 方法时使用 -= 1 来增加我的时间一次,而不是 -1。我还创建了一个调用“计时器”函数的新方法。我决定将一个名为“Start Timer”的新按钮绑定到这个函数。当这个按钮被按下时,它会启动允许时钟倒计时的“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 时钟调用计时器方法。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-23
      • 2019-05-15
      • 1970-01-01
      • 2013-09-26
      相关资源
      最近更新 更多