2017-01-07 11 views
0

Ich habe einen Knopf und zwei Schieber in meiner Probe .kv Datei:Kivy Aufruf Methoden aus verschiedenen Klassen

<intLab>: 
    BoxLayout: 
     orientation: "vertical" 
    BoxLayout: 
     size_hint_y: None 
     height: 10 
     orientation: "horizontal" 

     FREQslider: 
      id: s2 
      color: 1,0.5,1,1 
      value: 20 
      orientation: 'vertical' 
      max: 300 
      min: 20 
      size_hint_x: None 
      width: '48dp' 
      step: 1 
      on_value: root.onFrequencySlide(self.value) 

     AMPLslider: 
      id: s3 
      color: 1,.5,.5,0 
      value: 1 
      orientation: 'vertical' 
      max: 100 
      min: 0 
      size_hint_x: None 
      width: '48dp' 
      step: 1 
      on_value: root.onAmplitudeSlide(self.value) 

     ToggleButton: 
      id: 'enableBtn' 
      text: 'Enable' if self.state == 'normal' else 'Disable' 
      state: 'normal' 
      on_release: root.on_disable() 

In der .py Datei Ich habe zwei Klassen. Die Klasse, die der .kv Struktur, intLab und einer anderen Klasse KivyCamera entspricht.

class intLab(BoxLayout): 

    def init_intlab(self): 
     pass 

    def on_disable(self): 
     self.updateFreqAmpl(0, 0) 
     self.ids.s2.value = 20 
     self.ids.s3.value = 0 

Vom Kivy UI, wenn ich drücken Sie die Taste disable, die updateFreqAmpl Methode wird aufgerufen, und beiden Schieber sind auf 20 bzw. 0, so dass dies funktioniert.

Allerdings, wenn ich die on_disable Methode aus der KivyCamera Klasse aufrufen dann, obwohl die updateFreqAmpl Methode aufgerufen wird, ändern sich die Schieber-Werte nicht, aber kein Fehler gegeben.

Hier ist, wie ich die on_disable Methode aus der KivyCamera Klasse aufrufen:

class KivyCamera(Image): 

    def __init__(self, **kwargs): 
     super(KivyCamera, self).__init__(**kwargs) 
     self.capture = None 

    def update(self, dt): 
     t = intLab() 
     intLab.on_disable(t) 

Bitte beachten Sie, dass dieses vereinfachte Beispiel ist, aber ich habe die Kern Details erfasst.

Antwort

0

Sie erstellen eine neue Instanz von Intlab statt, wenn die bestehenden verwenden.

def update(self, dt): 
    t = intLab() #creating a new one == :(
    intLab.on_disable(t) 

Sie benötigen die bestehendenintLadInstanz zugreifen ,,,

+0

Es macht keinen Sinn zu nennen 'intLab.on_disable (t)', wenn Ihr Rat nicht eine neue Instanz zuweisen zu "t". Mit dem "t" entfernt bekomme ich diesen Fehler 'TypeError: ungebundene Methode on_disable() muss mit intLab-Instanz als erstes Argument aufgerufen werden (bekommt stattdessen nichts)' – tomdertech

+0

Sie sollten es auf eine andere Weise zugreifen, zum Beispiel * hässlich way *, keep eine globale Referenz darauf –

+0

Könnten Sie mir bitte ein Beispiel geben. Ich weiß nicht, wie du meinst. Danke – tomdertech

Verwandte Themen