2017-03-05 103 views
0

我在kivy中構建了一個智能鬧鐘。爲了使它成爲模塊化,我使用python代碼(使用佈局小部件作爲基類)構建每個主要小部件(當前時間,當前天氣,警報等),然後使用kv語言文件將這些小部件放置在屏幕上。Python + Kivy:從後端代碼調度事件

其中幾個小部件需要天氣數據,我寫了一個可以使用wunderground API獲取這些數據的類。我遇到的問題是api請求是有限的,並且我不希望每個小部件重複輪詢相同的數據。

我的解決方案是構建一個輪詢定時器數據的單個類(使用kivy Clock類),然後發送「新的天氣數據可用」事件。小部件要麼從事件(或更好)中讀取數據,而是要引用數據後端對象,以便每次都可以請求緩存的數據。

我不知道如何在kivy框架中解決這個問題。

這個後端類在哪裏生活?它是根部件類的一部分,還是「應用」類的一部分?

後端對象是否可以通過控件直接訪問?這是如何完成的?

如何使這些小部件知道我的自定義「new_data」事件,以及如何告訴小部件來聽它?

回答

0

在我看來,最好的解決方案是將您的天氣數據存儲在kivy屬性中。

Kivy屬性將自動更新整個kivy小部件。以說

要設置kivy屬性,導入必要的屬性,然後設置varaible屬性:

from kivy.properties import StringProperty 

weatherData = StringProperty() 

之後您可以從您Kivy部件weatherData,他們會自動更新。