我正在尝试使用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的使用是否会改变某些东西?我的错误在哪里?
答案 0 :(得分:1)
def build(self):
counter = Counter_Timer()
Clock.schedule_interval(counter.update, 1.0)
return Counter_Timer()
您计划对计数器实例进行更新,该工作正常,但随后您又返回一个新的不同的 Counter_Timer
。您永远不会更改其属性,因此其文本永远不会更新。
您只需要return counter
代替。