【问题标题】:Refreshing Kivy Image with Python使用 Python 刷新 Kivy 图像
【发布时间】:2017-02-05 15:00:09
【问题描述】:

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

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

  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()

【问题讨论】:

  • 如前所述,这听起来像是Image.reload 中的一个错误。你能提供一个最小的可运行示例来测试吗?
  • 我已经编辑了原始帖子,现在可以使用重新加载图像错误的示例

标签: python image kivy


【解决方案1】:

您的 Chart1 没有名为 Image 的属性,因此 self.Image.reload() 会引发错误。您会在回溯中看到这一点,但您添加了一个包罗万象的 try/except ,它完全隐藏了正在发生的事情。出于这个原因,使用包罗万象的 try/except 几乎不是一个好主意 - 如果您预计会出错,请仅捕获将引发的特定异常,并尝试确保不会引发相同的异常以任何其他方式。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    • 2016-12-27
    • 1970-01-01
    相关资源
    最近更新 更多