How do I fix 'ValueError: callback must be a callable, got 18:19:46'
How do I fix 'ValueError: callback must be a callable, got 18:19:46'
所以我想很好地掌握 kivy,我想创建一个基本的时钟应用程序,但当我去更新时钟标签时,我一直 运行 遇到问题。我在这里查看了其他线程,但仍然找不到正确的解决方案。我相信我在 Clock.schedule_interval 做错了什么,但我又想了解基维,但我不确定。任何帮助将不胜感激
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)
实际上是在调用 returns 时间的函数,并且您无法安排字符串(18:19:46
,根据您的错误)。
但是,这并没有说明更新了 ClockScreen 的哪个 实例 (您是通过 class 而不是特定实例引用该函数),所以这可能更符合您的要求
class FirstApp(App):
def build(self):
return ClockScreen()
def on_start(self):
cs = self.build()
Clock.schedule_interval(cs.updateClock, 1)
所以我想很好地掌握 kivy,我想创建一个基本的时钟应用程序,但当我去更新时钟标签时,我一直 运行 遇到问题。我在这里查看了其他线程,但仍然找不到正确的解决方案。我相信我在 Clock.schedule_interval 做错了什么,但我又想了解基维,但我不确定。任何帮助将不胜感激
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)
实际上是在调用 returns 时间的函数,并且您无法安排字符串(18:19:46
,根据您的错误)。
但是,这并没有说明更新了 ClockScreen 的哪个 实例 (您是通过 class 而不是特定实例引用该函数),所以这可能更符合您的要求
class FirstApp(App):
def build(self):
return ClockScreen()
def on_start(self):
cs = self.build()
Clock.schedule_interval(cs.updateClock, 1)