用Python刷新Kivy图像

2024-04-24 05:24:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个用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()

Tags: thefrom图像importselfappsourcechart
1条回答
网友
1楼 · 发布于 2024-04-24 05:24:31

您的Chart1没有名为Image的属性,因此self.Image.reload()会引发一个错误。您可以在回溯中看到这一点,但您添加了catchall try/但它完全隐藏了发生的事情。除非你用一个特别的方法来提出一个好的例外,否则你永远也不会用一个特别的方法来提出这个问题。在

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

相关问题 更多 >