2017-06-27 6 views
1

ich einen Zähler in einer Klasse erstellt den Wert von countPython/Kivy - Wie "connect" eine Funktion und ein Etikett in kv/py Dateien

count = 0 

class LifeCounterApp(App): 
    def incr(n): 
     global count 
     count += 1 
     return count 

ich eine kv-Datei in dem Sie haben zu erhöhen I Ich erstelle die Struktur meiner App.

Was ich tun möchte: Der Button "+" in meiner App muss den Wert des Labels aktualisieren.

Beispiel: Das Label hat den Standardwert 0. Wenn ich auf die Schaltfläche klicke, muss die Beschriftung ihren Wert auf 1 und so weiter ändern. Meine Fragen

:

1) Wie der Wert des Etiketts von der Py-Datei zu übernehmen?

2) Die Art und Weise, wie ich die Funktion incr aufruft, ist korrekt? Denn beim Klicken auf den Button passiert nichts.

Button: 
    text: "+" 
    on_release: 
     app.incr() 
Label: 
    text: app.count (?) 

Ich hoffe, dass meine Frage klar und gut formuliert ist.

+1

Gehen Sie durch die [Pong-Tutorial] (https://kivy.org/docs/tutorials/pong.html)? Es sollte dir bei deiner Frage helfen. – syntonym

+0

Ich werde es durchmachen! Danke für deinen Vorschlag! –

Antwort

3

Sie sollten NumericProperty dafür und nicht eine globale Python-Variable verwenden.

Beispiel:

from kivy.app import App 
from kivy.uix.boxlayout import BoxLayout 
from kivy.properties import NumericProperty 
from kivy.lang import Builder 


Builder.load_string(''' 
<LifeCounter>: 
    BoxLayout: 
     orientation: "vertical" 

     Button: 
      text: "+" 
      on_release: root.count += 1 
     Label: 
      id: l_label 
      text: str(root.count) 

''') 


class LifeCounter(BoxLayout): 
    count = NumericProperty(0) 
    def __init__(self, **kwargs): 
     super(LifeCounter, self).__init__(**kwargs) 

class DemoApp(App): 
    def build(self): 
     return LifeCounter() 

if __name__ == '__main__': 
    DemoApp().run() 

Wenn Sie incr Methode verwenden mögen, den Wert von count erhöhen Sie können es tun:

from kivy.app import App 
from kivy.uix.boxlayout import BoxLayout 
from kivy.properties import NumericProperty 
from kivy.lang import Builder 


Builder.load_string(''' 
<LifeCounter>: 
    BoxLayout: 
     orientation: "vertical" 

     Button: 
      text: "+" 
      on_release: root.incr() 
     Label: 
      id: l_label 
      text: str(root.count) 

''') 


class LifeCounter(BoxLayout): 
    count = NumericProperty(0) 
    def __init__(self, **kwargs): 
     super(LifeCounter, self).__init__(**kwargs) 

    def incr(self): 
     self.count += 1 

class DemoApp(App): 
    def build(self): 
     return LifeCounter() 

if __name__ == '__main__': 
    DemoApp().run() 
+0

Verstanden! Danke vielmals! –

Verwandte Themen