2017-12-01 1 views
0

, 내가 좋아하는 AsyncImage를 사용 AsyncImage 새로 고침/python2.7 + kivy1.9에서 파이썬

class Foo(BoxLayout): 

..def bar(self): 

....file_name=StringProperty() 

.. 

.. 

....self.file_name="/../../image.png" 

.. 

및 kivy에서

, 내가 변경 기능 표시 줄의 두 번째 호출하기 전에

BoxLayout: 

..AsyncImage: 

....source: root.file_name 

image.png의 내용 그러나 표시된 이미지는 변경되지 않습니다. kivy에서 소스 명령 다음에 "nocache : True"를 시도했지만 작동하지 않습니다.

func 표시 줄을 호출 할 때마다 어떻게 올바르게 표시 할 수 있습니까?

+0

당신은 복사하여 붙여 넣을 수있는 예제를 만들 수 있습니다. 함수를 호출하는 위치 나 이미지 파일 이름을 변경하는 위치는 표시하지 않습니다. – EL3PHANTEN

+0

의견을 보내 주셔서 감사합니다. 샘플 프로그램을 게시하려했지만 형식 오류 (들여 쓰기 오류?)로 거부했습니다. 나는 아직도 노력하고있다. – user9037109

답변

0

bar 호출에서 file_name 속성을 선언하는 것이 문제입니다.

main.py :

from kivy.app import App 
from kivy.uix.button import Button 
from kivy.uix.boxlayout import BoxLayout 
from kivy.properties import StringProperty 


class RootWidget(BoxLayout): 
    image_path = StringProperty('image1.png') # <<<<<<<< 

    def __init__(self, **kwargs): 
     super(RootWidget, self).__init__(**kwargs) 

    def change_image(self, path): 
     self.image_path = path 

class TestApp(App): 
    def build(self): 
     return RootWidget() 


if __name__ == '__main__': 
    TestApp().run() 

test.kv :

<RootWidget>: 
    orientation: "vertical" 

    AsyncImage: 
     id: image 
     source: root.image_path 

    BoxLayout: 
     size_hint_y: 0.1 

     Button: 
      text: 'Image 1' 
      on_press: root.change_image("image1.png") 

     Button: 
      text: 'Image 2' 
      on_press: root.change_image("image2.png") 

편집

속성은 클래스 속성이어야합니다 당신은 단지 하나의 파일 이름을 사용하여 이미지의 내용을 변경하려면

, 당신은 전화를 필요 reload 방법 (nocache 재산 True과) :

main.py :

import os 
from kivy.app import App 
from kivy.uix.button import Button 
from kivy.uix.boxlayout import BoxLayout 
from kivy.properties import ObjectProperty 


class AsyncTest(BoxLayout): 
    img = ObjectProperty() 

    def show_icon(self): 
     self.img.source = "/sdcard/archive/icon_0.png" 

    def switch(self): 
     os.system("mv /sdcard/archive/icon_1.png /sdcard/archive/icon_0.png") 
     self.img.reload() 

class TestApp(App): 
    def build(self): 
     return AsyncTest() 


if __name__ == '__main__': 
    TestApp().run() 

test.ḱv :

<AsyncTest>: 
    orientation: "vertical" 
    img: asyn_image 

    AsyncImage: 
     id: asyn_image 
     nocache: True 

    BoxLayout: 

     size_hint_y: 0.1 
     Button: 
      text: 'Show' 
      on_press: root.show_icon() 

     Button: 
      text: 'Switch' 
      on_press: root.switch() 

출력 :

enter image description here

+0

죄송합니다. 질문을 게시 할 때 실수를했습니다. – user9037109

+0

원본 프로그램은 다음과 같습니다 : class AsyncTest (BoxLayout) : def switch_self (self) : self.icon_img = "/ sdcard/archive/icon_0.png"def switch (self) : os.system ("mv /sdcard/archive/icon_1.png /sdcard/archive/icon_0.png ") – user9037109

+0

프로그램에서와 같이 두 개의 파일 이름이 다를 때 아무런 문제가 없습니다. 내 응용 프로그램에서, 나는 하나의 파일 이름을 사용하고 어떤 이유로 이미지의 내용을 변경하고 싶습니다. – user9037109

관련 문제