2017-11-25 15 views
1

여기에 유용한 사용자로부터이 코드가 있는데 거의 완벽합니다. 이 토글 때와 POWER_OFF 지프가 끌 때두 개의 다른 gif를 kivy의 토글 버튼에 바인딩하려면 어떻게해야합니까?

from kivy.app import App 
from kivy.uix.boxlayout import BoxLayout 
from kivy.lang import Builder 

Builder.load_string(""" 
<ExampleApp>: 
    id: main 
    orientation: "vertical" 
    Button: 
     size_hint_x: None 
     size_hint_y: None 
     height: 300 
     width: self.height 
     center: self.parent.center 
     text: "" 
     on_press: gif.anim_delay = 0.09 
     on_press: gif._coreimage.anim_reset(True) 

     Image: 
      id: gif 
      source: 'power_on.gif' 
      center: self.parent.center 
      height: 300 
      width: self.height 
      allow_stretch: True 
      anim_delay: -1 
      anim_loop: 1 


""") 

class ExampleApp(App, BoxLayout): 
    def build(self): 
     return self 


if __name__ == "__main__": 
    ExampleApp().run() 

가 나는 두 개의 서로 다른 GIF를 power_on의 지프를 사용해야합니다. 그래서 토글 버튼으로 바꾸려고했습니다.

on_press: gif.source="power_off.gif" 

하지만 전혀 작동하지 않았습니다. 그것은 power_on gif를 재생하지 못했습니다. 즉, gif의 소스를 power_off로 즉시 변경했기 때문입니다.

이 문제를 해결하는 올바른 방법은 무엇입니까?

-consider StringProperty 수입을 추가하는 특성이 현재 GIF 이미지 소스

from kivy.properties import StringProperty 

- 추가 상이한 변화를 처리하는 방법을 유지할 것이다

답변

1

다음은 제 GIF가 power_off.gif이다 인정 :

class ExampleApp(App, BoxLayout): 
    power = StringProperty('power_off.gif') 

    def build(self): 
     return self 

    def change_state(self): 
     if self.power == 'power_on.gif': 
      self.power = 'power_off.gif' 
     else: 
      self.power = 'power_on.gif' 

은 KV에 변경 사항을 추가 - 그럼 :

Builder.load_string(""" 
<ExampleApp>: 
    id: main 
    orientation: "vertical" 
    Button: 
     size_hint_x: None 
     size_hint_y: None 
     height: 300 
     width: self.height 
     center: self.parent.center 
     text: "" 
     on_press: gif.anim_delay = 0.09 
     on_press: gif._coreimage.anim_reset(True); root.change_state() 

     Image: 
      id: gif 
      source: root.power 
      center: self.parent.center 
      height: 300 
      width: self.height 
      allow_stretch: True 
      anim_delay: -1 
      anim_loop: 1 


""")