Kivy - 如何使用Clock将变量传递给KV语言

时间:2014-08-11 10:46:32

标签: python kivy

我正在尝试使用Kivy Framework编写一个简单的倒数计时器应用程序。我已经计算了所有变量,我需要做的就是将它们传递给KV语言来显示它们。但是,我坚持传递价值观。

import datetime
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.clock import Clock
from kivy.properties import StringProperty, NumericProperty

class Counter_Timer(BoxLayout):
    days = StringProperty()
    hours = StringProperty()
    minutes = StringProperty()
    seconds = StringProperty()

    def update(self, dt):
        delta = datetime.datetime(2014, 9, 13, 3, 5) - datetime.datetime.now()
        self.days = str(delta.days)
        hour_string = str(delta).split(', ')[1]
        self.hours = hour_string.split(':')[0]
        self.minutes = hour_string.split(':')[1]
        self.seconds = hour_string.split(':')[2].split('.')[0]

class Counter(App):
    def build(self):
        counter = Counter_Timer()
        Clock.schedule_interval(counter.update, 1.0)
        return Counter_Timer()


if __name__=='__main__':
    Counter().run()

KV:

<Counter_Timer>:
    orientation: 'vertical'
    Label: 
        text: 'Days '
        font_size: '30dp'
    Label:
        font_size: '30dp'
        # text value with days left.
        text: root.days

代码不会导致错误,但不会显示剩余天数。

我想我尝试使用root.property访问变量的方式是可以的,但是Clock的使用是否会改变某些东西?我的错误在哪里?

1 个答案:

答案 0 :(得分:1)

def build(self):
    counter = Counter_Timer()
    Clock.schedule_interval(counter.update, 1.0)
    return Counter_Timer()

您计划对计数器实例进行更新,该工作正常,但随后您又返回一个新的不同的 Counter_Timer。您永远不会更改其属性,因此其文本永远不会更新。

您只需要return counter代替。