我有一个天气应用程序,我用Python / Kivy编写,它成功下载并在应用程序启动时加载图像,但天气图每天都在变化而且不令人耳目一新。 Kivy文档讨论了nocache: True
,image.reload()
&我已经尝试了self.the_24h_chart.source.reload()
并且都错了。
如何重新加载图片文件?伪代码:
我目前的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 :(得分:1)
您的Chart1没有名为Image的属性,因此self.Image.reload()
会引发错误。你会在追溯中看到这一点,但是你添加了一个catchall try /,除了它完全隐藏了正在发生的事情。出于这个原因,使用catchall try / except几乎不是一个好主意 - 如果你期望出现问题,只捕获将引发的特定异常,并尝试确保不能引发相同的异常以任何其他方式。
访问Image实例的最简单方法是使用self.ids._chart_img.reload()
。