我有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'])
答案 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"])