问题描述
所以我试图很好地掌握 kivy,我想创建一个基本的时钟应用程序,但当我去更新时钟标签时,我一直遇到问题。我在这里查看了其他线程,但仍然找不到正确的解决方案。我相信我在 Clock.schedule_interval 上做错了但同样,我试图了解 kivy 但我不确定。任何帮助将不胜感激
Python 代码
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.gridlayout import GridLayout
from kivy.lang import Builder
from kivy.clock import Clock
import time
Builder.load_file('myApp.kv')
class ClockScreen(Widget):
def updateClock(self):
hour = time.strftime("%H")
minute = time.strftime("%M")
second = time.strftime("%s")
Clocktime = self.root.ids.clock.text
print(Clocktime)
newTime = self.root.ids.clock.text = f'{hour}:{minute}:{second}'
return newTime
class FirstApp(App):
def build(self):
return ClockScreen()
def on_start(self):
Clock.schedule_interval(ClockScreen.updateClock(self),1)
FirstApp().run()
```
KV 文件
:
FloatLayout:
size: root.width,root.height
Label:
id: clock
text: "12:00"
解决方法
试试
def on_start(self):
Clock.schedule_interval(ClockScreen.updateClock,1)
原因:
ClockScreen.updateClock
是可调用的(函数句柄)。 This is also explained in the docs。
ClockScreen.updateClock(self)
实际上是调用返回时间的函数,您不能安排字符串(18:19:46
,根据您的错误)。
但是,这并没有说明 ClockScreen 的哪个实例得到更新(您通过类而不是特定实例引用该函数),因此这可能更准确地满足您的需求
class FirstApp(App):
def build(self):
return ClockScreen()
def on_start(self):
cs = self.build()
Clock.schedule_interval(cs.updateClock,1)