2017-02-28 1 views
1

Je crée une étiquette qui devrait être mise à jour toutes les secondes. J'ai essayé de le faire avec le programme d'horloge, mais cela ne semble pas fonctionner. L'étrange est que si j'utilise un bouton pour appeler la même fonction, cela fonctionne très bien.Problème avec kivy Horloge de mise à jour de l'horloge

from kivy.app import App 
from kivy.uix.boxlayout import BoxLayout 
from kivy.properties import StringProperty 
from kivy.clock import Clock 


class FirstLayout(BoxLayout): 
    r = 0 

    def __init__(self, **kwargs): 
     super(FirstLayout, self).__init__(**kwargs) 
     self.change = self.ids.temp_label 

    def my_callback(self, *args): 
     self.r += 1 
     print self.r 
     t = str(self.r) 
     self.change.text = t 


class TryApp(App): 
    def build(self): 
     Clock.schedule_interval(FirstLayout().my_callback, 1) 
     return FirstLayout() 


app = TryApp() 
app.run() 

le fichier .kv:

<FirstLayout>: 
    orientation: 'vertical' 
    Label: 
     id: temp_label 
     text: 'something' 
    Button: 
     on_press: root.my_callback() 

Quand je lance le code je reçois les impressions montrant que la fonction est en cours d'exécution, mais l'étiquette ne met pas à jour. Quelque chose ne va pas avec ma logique là-bas?

Merci d'avance.

PS: Je sais qu'il ya plusieurs questions à ce sujet ici, malheureusement ceux que je trouve ont été répondu avec des réponses sur l'utilisation de l'horloge que je fais déjà

Répondre

0

Le problème est que le rappel est pour une instance que vous ne « t utiliser:

def build(self): 
    Clock.schedule_interval(FirstLayout().my_callback, 1) #<--- FirstLayout created and never used 
    return FirstLayout() #this one will be used :(

au lieu de cela, vous devez appeler la méthode de la FirstLayout que vous utilisez

def build(self): 
    first_layout = FirstLayout() # "There should be one ..." :) 
    Clock.schedule_interval(first_layout.my_callback, 1) 
    return first_layout 
+0

Problème résolu! Merci beaucoup. Je suppose que j'ai encore beaucoup à apprendre sur python. – Thiago