2017-02-28 142 views
1

我正在制作一个应该每隔一秒更新一次的标签。我试着用时钟表制作它,但它似乎没有工作。奇怪的是,如果我使用一个按钮来调用相同的功能,它工作正常。kivy问题时钟更新标签

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

的.kv文件:

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

当我运行代码我得到的印刷品显示该功能正在运行,但标签不更新。那里有我的逻辑有问题吗?

预先感谢您。

PS:我知道这里可悲的是那些我发现是回答有关使用,我已经做

回答

0

的问题是,回调是一个例如时钟答案大概有这几个问题,你不要“T使用

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

相反,你需要调用FirstLayout的方法,你使用

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

问题解决了!非常感谢你。我想我还有很多东西要学习python。 – Thiago