使用Clock.schedule_interval每秒更新一次显示的变量

时间:2019-04-27 00:34:51

标签: python kivy

我有schedule_interval调用一个函数,该函数从Web上获取天气数据,然后将其解析为dict。我的kv文件读取该字典并在floatlayout中显示值。我知道该函数正在被调用,因为我也正在将该函数打印到控制台,但是它并未在floatlayout窗口中更新。我认为这些值会根据我阅读的内容自动更新。

GUI.py
class weather(FloatLayout):
    def w(self):
        a = parse()
        print(a)
        return a

class weatherApp(App):
    def build(self):
        d = weather()
        Clock.schedule_interval(d.w, 1)
        return d

weather.kv
<Layout>:
     DragLabel:
        font_size: 600
        size_hint: 0.1, 0.1
        pos: 415,455
        text: str(root.w()['temp0'])

这只是标签之一。我是Kivy的新手,所以 如果这对您看来很残酷的话 人,我道歉。

def w(self)的print(a)部分每秒工作一次,但是窗口不显示新变量。

test.py

from kivy.app import App
from kivy.clock import Clock
from kivy.uix.floatlayout import FloatLayout

a = {}
a['num'] = 0

class test(FloatLayout):
    def w(self):
        a['num'] += 1
        print(a['num'])
        return a

class testApp(App):
    def build(self):
        d = test()
        Clock.schedule_interval(test.w, 1)
        return d

if __name__ == '__main__':
    p = testApp()
    p.run()


test.kv

#:kivy 1.10.1

<Layout>:
    Label:
        font_size: 200
        size_hint: 0.1, 0.1
        pos: 415,455
        text: str(root.w()['num'])

1 个答案:

答案 0 :(得分:0)

您似乎有一些误解:

  • 如果您在python中调用函数,则并不意味着将调用.kv。因此,如果使用Clock.schedule_interval()调用w方法,则并不意味着计算出的值会更新Label文本的值。

  • 使用Clock.schedule_interval调用函数时,必须使用对象而不是类。在您的情况下,test是类,而d是对象。

使用Clock.schedule_interval调用函数时,必须使用对象而不是类。在您的情况下,test是类,而d是对象。

*。py

from kivy.app import App
from kivy.clock import Clock
from kivy.uix.floatlayout import FloatLayout
from kivy.properties import DictProperty


class test(FloatLayout):
    a = DictProperty({"num": 0})

    def w(self, dt):
        self.a["num"] += 1
        print(self.a["num"])


class testApp(App):
    def build(self):
        d = test()
        Clock.schedule_interval(d.w, 1)
        return d


if __name__ == "__main__":
    p = testApp()
    p.run()

*。kv

#:kivy 1.10.1

<Layout>:
    Label:
        font_size: 200
        size_hint: 0.1, 0.1
        pos: 415,455
        text: str(root.a["num"])