python和kivy的新手。在仪表板上工作以显示时间和其他参数。当前已设置仪表板,并完美显示所有值。但是仍然无法弄清楚如何在那些用于时间的标签中动态更新时间。发现了类似的帖子,但仍在挣扎。在我的代码的摘要部分下面发布。
与Clock对象一起使用,每隔一秒触发一个方法,该方法需要更新kv文件中的标签文本。但是无法将这种逻辑付诸实践。
sample.py
import time
import datetime
import kivy
kivy.require('1.11.0')
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.core.text import LabelBase
from kivy.clock import Clock
class MySec(BoxLayout):
seconds_string = time.strftime("%S")
class MyApp(App):
def build(self):
#Clock.schedule_interval('periodic_method', 1)
return MySec()
if __name__ == '__main__':
MyApp().run()
my.kv文件
<mysec>:
orientation: 'vertical'
Label:
id: kv_sec
text: root.seconds_string
font_size: 200
简而言之,我应该如何修改.py文件,以便我的.kv标签文本每秒都使用更新后的值进行更新。提前谢谢。
答案 0 :(得分:0)
使用Kivy StringProperty
自动更新Label
的文本,并使用Kivy Clock
对象,例如Clock.schedule_interval()
以在每个时间间隔更新StringProperty
。
seconds_string = time.strftime("%S")
,StringProperty
的类属性替换seconds_string = StringProperty('')
update_time()
以更新类属性seconds_string
Clock.schedule_interval()
调用方法update_time()
属性是定义事件并将其绑定的一种很棒的方法。 本质上,它们会产生事件,例如当您的 对象更改,所有引用该属性的属性都是 自动更新。
以下示例使用time()
函数提取时间。可以用datetime.now()
代替,例如将time.strftime("%S")
替换为datetime.now().strftime("%S")
,然后添加导入语句from datetime import datetime
import time
import kivy
kivy.require('1.11.0')
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.clock import Clock
from kivy.lang import Builder
from kivy.properties import StringProperty
Builder.load_string("""
<MySec>:
orientation: 'vertical'
Label:
id: kv_sec
text: root.seconds_string
font_size: 200
""")
class MySec(BoxLayout):
seconds_string = StringProperty('')
class MyApp(App):
def build(self):
Clock.schedule_interval(lambda dt: self.update_time(), 1)
return MySec()
def update_time(self):
self.root.seconds_string = time.strftime("%S")
if __name__ == '__main__':
MyApp().run()