2017-02-05 26 views
0

私はPython/Kivyで作成した天気アプリを持っています。アプリ起動時にイメージを正常にダウンロードしてロードしますが、天気図は毎日変更され、リフレッシュされません。 Kivyのドキュメントで説明されているnocache: Trueimage.reload() &私はself.the_24h_chart.source.reload()と両方のエラーを試しました。PythonでKivyイメージをリフレッシュ

イメージファイルを再ロードするにはどうすればよいですか?擬似コード:あなたのグラフ1は、画像という名前の属性を持っていない、

#! /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

  1. 画像

私の現在のKivyコードをリロード

  • 新しいイメージをダウンロードし、同じ名前で元上書きしたがってself.Image.reload()はエラーを発生させます。トレースバックにこれが表示されますが、何が起こっているかを完全に隠すcatchall tr​​y/exceptを追加しました。このため、catchall tr​​y/exceptを使用することは、決して良い考えではありません。何か間違ったことが予想される場合は、発生する特定の例外だけをキャッチし、同じ例外を発生させないようにしてください他の方法で。

    Imageインスタンスにアクセスする最も簡単な方法は、代わりにself.ids._chart_img.reload()を使用することです。

  • +0

    ありがとうございます – northwarks

    関連する問題