【问题标题】:Python + Kivy: Dispatching events from backend codePython + Kivy:从后端代码调度事件
【发布时间】:2017-07-25 13:44:09
【问题描述】:

我正在用 kivy 构建一个智能闹钟。为了使其模块化,我使用 python 代码(使用布局小部件作为基类)构建每个主要小部件(当前时间、当前天气、警报等),然后使用 kv 语言文件将这些小部件定位在屏幕上.

其中一些小部件需要天气数据,我编写了一个可以使用 wunderground api 获取这些数据的类。我遇到的问题是api请求是有限的,我不想让每个小部件重复轮询相同的数据。

我的解决方案是构建一个单独的类来轮询计时器上的数据(使用 kivy Clock 类),然后调度一个“新天气数据可用”的事件。小部件从事件中读取数据(或更好)具有对数据后端对象的引用,因此它可以随时请求缓存的数据。

我不确定如何在 kivy 框架中处理这个问题。

这个后端类在哪里?它是根小部件类的一部分,还是“App”类的一部分?

小部件可以直接访问后端对象吗?这是如何实现的?

如何让这些小部件知道我的自定义“new_data”事件,以及如何让小部件监听它?

【问题讨论】:

    标签: python events kivy


    【解决方案1】:

    在我看来,最好的解决方案是将天气数据存储在 kivy 属性中。

    Kivy 属性将在您的 kivy 小部件中自动更新。

    要设置 kivy 属性,请导入必要的属性,并将变量设置为所述属性:

    from kivy.properties import StringProperty
    
    weatherData = StringProperty()
    

    然后您可以从 Kivy 小部件中引用 weatherData,它们会自动更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-19
      • 1970-01-01
      • 2017-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多