kivy时钟更新标签的问题

时间:2017-02-28 14:25:48

标签: python label kivy clock

我制作的标签应该每隔一秒左右更新一次。我尝试用时钟表制作它,但它似乎不起作用。奇怪的是,如果我使用一个按钮调用相同的功能,它可以正常工作。

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:我知道这里有几个问题,遗憾的是我找到的答案是关于使用我已经做过的时钟的答案

1 个答案:

答案 0 :(得分:0)

问题是回调适用于不使用的实例

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