2017-03-05 1 views
0

저는 kivy에서 스마트 알람 시계를 만들고 있습니다. 모듈화하기 위해 파이썬 코드 (레이아웃 위젯을 기본 클래스로 사용)를 사용하여 기본 위젯 (현재 시간, 현재 날씨, 알람 등)을 작성한 다음 kv 언어 파일을 사용하여 위젯을 화면에 배치합니다. .Python + Kivy : 백엔드 코드에서 이벤트 디스패치

위젯 중 일부는 날씨 데이터가 필요하며 wunderground API를 사용하여이 데이터를 가져올 수있는 클래스를 작성했습니다. 내가 가진 문제는 API 요청이 제한되어 있고 동일한 데이터에 대해 각 위젯을 반복적으로 폴링하고 싶지 않다는 것입니다.

내 솔루션은 kivy Clock 클래스를 사용하여 타이머에서 데이터를 폴링하는 단일 클래스를 작성한 다음 "새로운 날씨 데이터를 사용할 수있다"라는 이벤트를 전달하는 것입니다. 위젯은 이벤트 (또는 그 이상)에서 데이터를 읽거나 데이터 백엔드 오브젝트에 대한 참조를 가지고 있으므로 캐시 된 데이터를 요청할 수 있습니다.

kivy 프레임 워크에서 어떻게 접근해야할지 모르겠습니다.

이 백엔드 클래스는 어디에서 생깁니 까? 그것은 루트 위젯 클래스의 일부입니까, 아니면 "App"클래스의 일부입니까?

위젯이 백엔드 객체에 직접 액세스 할 수 있습니까? 어떻게 완성 되었습니까?

이 위젯이 내 "new_data"이벤트를 인식하도록하려면 어떻게해야하며 위젯이이를 수신하도록 어떻게 말할 수 있습니까?

답변

0

가장 좋은 해결책은 기상 정보를 kivy 속성에 저장하는 것입니다.

Kivy 속성은 Kivy 위젯에서 자동으로 업데이트됩니다.

당신이 필요한 속성을 가져올하는 kivy 속성을 설정하고 가변적이고을 설정하려면 것을 특징으로하는 재산 :

from kivy.properties import StringProperty 

weatherData = StringProperty() 

당신은 다음 Kivy 위젯에서 weatherData를 참조 할 수 있으며이 자동으로 업데이트됩니다.