2014-08-28 1 views
1

계단식 스피너는 마스터 스피너의 두 번째 릴리스에서 원하는 것을 처리합니다.Kivy (KVlang) 케스케이드 스피너 세트가 첫 번째 on_release에 응답하도록하려면 어떻게해야합니까?

어떻게하면 첫 번째 출시에서이 작품을 만들 수 있습니까?

미리 감사드립니다. 여기에 내 KVlang 및 Python 코드가 있습니다.

KVlang :

# 0009_spinnerCascade.kv 
<[email protected]>: 
    orientation: 'vertical'  

    Spinner: 
     id: s1  
     text: 'colors' 
     values: 'colors numbers days'.split() 
     size_hint_y: None 
     height: '48dp' 
     my_string_property: 'hello from s1' 
     on_release: s2.my_key = self.text 

    Label: 
     text: 'Mid label' 

    Spinner: 
     id: s2 
     text: 'choose one' 
     my_dict: {'colors': 'red green blue'.split(), 'numbers': '1 2 3'.split(), 'days':'mon tue wed'.split() } 
     my_key: 'numbers' 
     values: self.my_dict[self.my_key] 
     size_hint_y: None 
     height: '48dp'   

MyLayout 

파이썬 당신의 회가 열리고 하나를 선택하기 전에 옵션을 보여줍니다 때

''' 0009_spinnerCascade.py 

''' 
import kivy 
kivy.require('1.8.0') 

from kivy.app import App 
from kivy.lang import Builder 
from kivy.config import Config 

Config.set('graphics', 'width', '430') 
Config.set('graphics', 'height', '430') 

class MyApp(App): 

    def build(self): 
     self.root = Builder.load_file('0009_spinnerCascade.kv') 
     return self.root 

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

답변

1

release 이벤트가 트리거됩니다. 그 순간에 s2.my_key 값은 s1.text으로 설정됩니다. 옵션을 선택하면 release 이벤트가 트리거되지 않고 s2.my_key은 변경되지 않습니다. 그런 다음 두 번째 클릭으로 s1 옵션 목록을 표시 한 후에는 두 번째 release 이벤트가 트리거되고 값이 s2.my_key으로 최종 값이 오른쪽으로 설정됩니다.

<[email protected]>: 
    # ... 

    Spinner: 
     id: s1  
     # ... 
     on_text: s2.my_key = self.text ; print("option selected") 

    # ... 
+0

명확한 설명 주셔서 감사합니다. –

+0

.kv 파일을 사용하지 않고 파이썬에서 어떻게 구현 될지 예를 들어 주시겠습니까? – Daniel

0

다음과 같이 내가이 동작을 구현 : 당신은 실제로 변화 감지 text 속성을 관찰 할 필요가

<[email protected]>: 
    # ... 
    Spinner: 
     id: s1  
     # ... 
     on_release: s2.my_key = self.text ; print("spinner opened") 

    # ... 

: 함께이 동작을 관찰

def callback(instance,value): 
    print(instance,value) 

class spinnerName(Spinner): 
    values = ('1','2','3') 

spinInstance = Spinner() 
spinInstance.bind(text=callback) 

인쇄 (예, 값) 회 전자에서 항목을 클릭 할 때마다 호출됩니다.

관련 문제