我正在kivy建立一个智能闹钟。为了使它模块化,我使用python代码(使用布局小部件作为基类)构建每个主要小部件(当前时间,当前天气,警报等),然后使用kv语言文件将这些小部件放在屏幕上
其中一些小部件需要天气数据,我编写了一个可以使用wunderground api获取此数据的类。我遇到的问题是api请求是有限的,我不想让每个小部件重复轮询相同的数据。
我的解决方案是构建一个单独的类,轮询定时器上的数据(使用kivy Clock类),然后调度“新天气数据可用”的事件。窗口小部件从事件中读取数据(或更好)具有对数据后端对象的引用,因此它可以随时请求缓存数据。
我不确定如何在kivy框架中解决这个问题。
这个后端课程住在哪里?它是根小部件类的一部分,还是“App”类的一部分?
小部件可以直接访问后端对象吗?这是如何完成的?
如何让这些小部件知道我的自定义“new_data”事件,以及如何告诉小部件听取它?
答案 0 :(得分:0)
在我看来,最好的解决方案是将您的天气数据存储在kivy属性中。
Kivy属性将自动更新整个kivy小部件。
要设置kivy属性,请导入必要的属性,并将变量设置为所述属性:
from kivy.properties import StringProperty
weatherData = StringProperty()
然后,您可以从Kivy小部件中引用weatherData
,它们会自动更新。