2017-02-05 8 views
0

У меня есть приложение для работы с погодой, которое я написал в Python/Kivy, оно успешно загружает и загружает изображение при запуске приложения, но карта погоды меняется ежедневно и не освежает. В документации Kivy обсуждаются nocache: True, image.reload() & Я пробовал self.the_24h_chart.source.reload() и обе ошибки.Обновление изображения Kivy с помощью Python

Как перезагрузить файл изображения? Псевдо код:

  1. загрузить новое изображение и переписать оригинал с таким же именем
  2. перезагружать изображение

Мой текущий код Kivy:

#! /usr/bin/env python 
# -*- decoding: utf-8 -*- 
from kivy.app import App 
from kivy.lang import Builder 
from kivy.uix.screenmanager import ScreenManager, Screen 
from kivy.properties import ObjectProperty, StringProperty, ListProperty 
from kivy.clock import Clock 
from kivy.loader import Loader 
import time 
from datetime import datetime, timedelta 
import socket 
import urllib 




#--------------- kivy code ------------------ 
Builder.load_string(''' 

<Chart1>: 
    name: 'chart1' 
    the_24h_chart: _chart_img 

    Image: 
     source: 'images/chart.jpg' 
     nocache: True 
     id: _chart_img 
     size_hint_y: None 
     height: dp(420) 
''') 
#------------------------------------------- 


class Chart1(Screen): 

    def update_chart1(self, sec): 
     try: 
     urllib.urlretrieve('http://wxcharts.eu/charts/gfs/uk/06/overview_030.jpg', 'images/chart.jpg') 
     self.the_24h_chart.source = 'images/chart.jpg' 
     self.Image.reload() 
     except: 
     print 'Error Updating Image' 
     pass 


class ScreenManagerApp(App): 

    def build(self): 
     sm = ScreenManager() 
     self.chart1_screen = Chart1(name = 'chart1') 
     sm.add_widget(self.chart1_screen) 
     return sm 


    def on_start(self): 
     event1 = Clock.create_trigger(self.chart1_screen.update_chart1) 
     Clock.schedule_interval(self.chart1_screen.update_chart1, 3600) # 1 Hour 
     event1() 

#=========================================================== 
# run the App ! 
ScreenManagerApp().run() 
+0

Как описано, это звучит как ошибка в 'Image.reload'. Можете ли вы предоставить минимальный исполняемый пример для тестирования? – inclement

+0

Я отредактировал исходное сообщение, теперь рабочий пример с ошибкой перезагрузки – northwarks

ответ

1

Ваш Chart1 не имеет атрибут с именем изображения, поэтому self.Image.reload() вызывает ошибку. Вы бы увидели это в трассировке, но вы добавили пробную попытку/кроме того, что полностью скрывает то, что происходит. По этой причине использование catchall try/except почти никогда не является хорошей идеей - если вы ожидаете, что что-то пойдет не так, поймите только конкретное исключение, которое будет поднято, а также постарайтесь убедиться, что одно и то же исключение не может быть поднято любым другим способом.

Самый простой способ получить доступ к экземпляру изображения вместо этого - использовать self.ids._chart_img.reload().

+0

Да, что работает благодаря – northwarks

 Смежные вопросы

  • Нет связанных вопросов^_^