2017-09-23 34 views
1

私はアプリケーションを再起動せずにUSBデバイスが接続されているかどうかを確認するためにkivyを使ってアプリケーションを書いています。私はClockを使って必要なメソッドを頻繁に呼び出しています。しかし、これは常に次のエラーが表示されます:kivyのClock.schedule_intervalを使ってボタンのテキストを更新するには?

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 = """<[email protected]>: 
    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._clock.CyClockBase._process_events (kivy_clock.c:7700) File "kivy_clock.pyx", line 397, in kivy._clock.CyClockBase._process_events (kivy_clock.c:7577) File "kivy_clock.pyx", line 395, in kivy._clock.CyClockBase._process_events (kivy_clock.c:7498) File "kivy_clock.pyx", line 167, in kivy._clock.ClockEvent.tick (kivy_clock.c:3490) TypeError: getusbdevices() takes exactly 1 argument (2 given)

+0

これは私が kivy._clock.CyClockBase._process_eventsを得ている番目のログ(7700 kivy \ _clock.c)がありますkivy \ _clock.c:7577) kivy._clock.CyClockBase._process_events(kivy \ _clock.c:7498)の "kivy \ _clock.pyx"ファイル395行 ファイル "kivy \ _clock.pyx"、167行目、kivy._clock.ClockEvent.tick(kivy \ _clock.c:3490) TypeError:getusbdevices()は1つの引数(2が指定されている) –

答えて

0

Clock.schedule_intervalにあなたのパスは、スケジューリングまたは最後からの経過時間を表す(私は通常、デルタ時間dtを呼ぶことを)追加パラメータを、取得するメソッドを取得していますログですコールバック関数を呼び出します。ここでは、その価値については気にしませんが、依然としてそれを受け入れる必要があります。

この

class KartScanApp(App): 
    […] 

    def getusbdevices(self, dt): 
     […] 

のようなあなたのメソッドのシグネチャを変更

し、あなたのコードは動作するはずです。 kivy._clock.CyClockBase._process_eventsで ファイル "kivy \ _clock.pyx"、行397、(:

関連する問題