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)