使用Python刷新Kivy图像

时间:2017-02-05 15:00:10

标签: python image kivy

我有一个天气应用程序,我用Python / Kivy编写,它成功下载并在应用程序启动时加载图像,但天气图每天都在变化而且不令人耳目一新。 Kivy文档讨论了nocache: Trueimage.reload()&我已经尝试了self.the_24h_chart.source.reload()并且都错了。

如何重新加载图片文件?伪代码:

  1. 下载新图片并覆盖同名原件
  2. 重新加载图片
  3. 我目前的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()
    

1 个答案:

答案 0 :(得分:1)

您的Chart1没有名为Image的属性,因此self.Image.reload()会引发错误。你会在追溯中看到这一点,但是你添加了一个catchall tr​​y /,除了它完全隐藏了正在发生的事情。出于这个原因,使用catchall tr​​y / except几乎不是一个好主意 - 如果你期望出现问题,只捕获将引发的特定异常,并尝试确保不能引发相同的异常以任何其他方式。

访问Image实例的最简单方法是使用self.ids._chart_img.reload()