代码之家  ›  专栏  ›  技术社区  ›  Shankar Kumar Yelapu

如何使用时钟更新按钮的文本。计划kivy的时间间隔?

  •  1
  • Shankar Kumar Yelapu  · 技术社区  · 7 年前

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

    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()
    

    以上是我的代码:有人能帮我解决这个问题吗? 这是我要的日志

    基维_时钟CyClockBase_处理事件(kivy\u clock.c:7700)文件“kivy\u clock.pyx”,第397行,在kivy中_时钟CyClockBase_处理事件(kivy\u clock.c:7577)文件“kivy\u clock.pyx”,第395行,在kivy中_时钟CyClockBase_处理事件(kivy\u clock.c:7498)文件“kivy\u clock.pyx”,第167行,在kivy中_时钟时钟事件。tick(kivy_clock.c:3490)TypeError:getusbdevices()正好接受1个参数(给定2个)

    1 回复  |  直到 7 年前
        1
  •  0
  •   Tshirtman    7 年前

    你传球的方法 Clock.schedule_interval dt

    class KartScanApp(App):
        […]
    
        def getusbdevices(self, dt):
            […]
    

    你的代码应该可以工作。