Python 如何使用kivy中的Clock.schedule\u interval更新按钮文本?

Python 如何使用kivy中的Clock.schedule\u interval更新按钮文本?,python,kivy,kivy-language,Python,Kivy,Kivy Language,我正在使用kivy编写一个应用程序,以检查USB设备是否已连接,而无需重新启动我的应用程序。根据文档,我正在使用Clock在特定时间间隔内频繁调用所需的方法。但是,这总是表示以下错误: from __future__ import print_function from kivy.app import App from kivy.lang import Builder from kivy.uix.floatlayout import FloatLayout from kivy.uix.butto

我正在使用kivy编写一个应用程序,以检查USB设备是否已连接,而无需重新启动我的应用程序。根据文档,我正在使用Clock在特定时间间隔内频繁调用所需的方法。但是,这总是表示以下错误:

from __future__ import print_function
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.button import Button
from kivy.clock import Clock
import wmi

kv = """<KartScan@Screen>:
    orientation: 'horizontal'
    name: 'introscreen'
    canvas.before:
        Rectangle:
            pos: self.pos
            size: self.size
            source: 'index.png'
    AnchorLayout:
        anchor_x: 'center'
        anchor_y: 'center'
        BoxLayout:
            orientation:'horizontal'
            size_hint: .5, .1
            canvas:
                Color:
                    rgb: 1, 1, 1
                Rectangle:
                    pos: self.pos
                    size: self.size
            spacing: 20
            pos_hint: {'center_x':.8, 'center_y': .8}
            AnchorLayout:
                anchor_x: 'left'
                size_hint_x: .5
                Button:
                    id: statebtn
                    size_hint: None, None
                    height: 50
                    width: self.texture_size[0]
                    padding: 10, 10
                    text: app.getusbdevices()"""

Builder.load_string(kv)
statebtn = Button(text="INSTRUMENT_NOT_FOUND")
class KartScan(FloatLayout):
    def __init__(self, **kwargs):
        super(KartScan, self).__init__(**kwargs)

class KartScanApp(App):
    def build(self):
        k = KartScan()
        Clock.schedule_interval(self.getusbdevices, 2)
        return k

    def getusbdevices(self):
        c = wmi.WMI()
        statebtn.text = u"INSTRUMENT_NOT_FOUND"
        wql = "Select * From Win32_USBControllerDevice"
        for item in c.query(wql):
            if "USB Device" in item.Dependent.Caption:
                statebtn.text = u"CONNECTED"
            else:
                statebtn.text = u"INSTRUMENT_NOT_FOUND"
        return statebtn.text
if __name__ == '__main__':
    KartScanApp().run()
上面是我的代码:有人能帮我解决这个问题吗? 这是我要的日志

kivy.\u clock.CyClockBase.\u process\u events kivy\u clock.c:7700文件kivy\u clock.pyx,第397行,在kivy.\u clock.CyClockBase.\u process\u events kivy\u clock.c:7577文件kivy\u clock.pyx,第395行,在kivy.\u clock.CyClockBase.\u process\u events kivy\u clock.pyx.c:7498文件kivy\u clock.pyx,第167行,在kivy中._clock.ClockEvent.tick kivy_clock.c:3490 TypeError:getusbdevices正好接受给定的1个参数2

传递给Clock.schedule\u interval的方法获得了一个额外的参数,我通常为delta time调用dt,它表示自调度或上次调用回调函数以来经过的时间量。在这里,你不在乎它的价值,但你仍然需要接受它

像这样更改您的方法签名

class KartScanApp(App):
    […]

    def getusbdevices(self, dt):
        […]
您的代码应该可以工作。

传递给Clock.schedule\u interval的方法得到一个额外的参数,我通常为delta time调用dt,它表示自调度或上次调用回调函数以来经过的时间量。在这里,你不在乎它的价值,但你仍然需要接受它

像这样更改您的方法签名

class KartScanApp(App):
    […]

    def getusbdevices(self, dt):
        […]

你的代码应该可以工作。

这是我得到kivy的日志。_clock.CyClockBase。_process_events kivy_clock.c:7700文件kivy_clock.pyx,第397行,在kivy。_clock.CyClockBase。_process事件kivy clock.c:7577文件kivy_clock.pyx,第395行,在kivy。_clock.CyClockBase。_process事件kivy_clock.c:7498文件kivy_clock.pyx,第167行,在kivy中.clock.ClockEvent.tick kivy\clock.c:3490类型错误:getusbdevices只接受1个参数2,因为这是我得到kivy的日志。\u clock.CyClockBase.\u process\u events kivy\u clock.c:7700文件kivy\u clock.pyx,第397行,在kivy中。\u clock.CyClockBase.\u process\u events kivy\u clock.c:7577文件kivy\u clock.pyx,第395行,在kivy.\u clock.CyClockBase.\u process\u events kivy\u clock.c:7498文件kivy\u clock.pyx,第167行,在kivy.\u clock.ClockEvent.tick kivy\u clock.c:3490 TypeError:getusbdevices恰好接受给定的1个参数2