如何让Kivy(KVlang)级联微调器设置响应我的第一个on_release?

时间:2014-08-28 15:51:00

标签: events event-handling kivy

我的级联旋转器在主旋转器的第二次释放时执行我想要的操作。

我如何在FIRST版本上完成这项工作?

提前致谢。这是我的KVlang和Python代码。

KVlang:

# 0009_spinnerCascade.kv
<MyLayout@BoxLayout>:  
    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

的Python

''' 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()

2 个答案:

答案 0 :(得分:1)

在您选择任何内容之前,当您的微调器打开并显示选项时,会触发

release事件。在那一刻,s2.my_key的值设置为s1.text。选择选项后,系统不会触发release事件,s2.my_key保持不变。然后,在您通过第二次单击显示s1选项列表后,将触发第二个release事件,并且最终将值s2.my_key设置为正确的值。请注意以下行为:

<MyLayout@BoxLayout>:  
    # ...  
    Spinner:  
        id: s1    
        # ...
        on_release: s2.my_key = self.text ; print("spinner opened")

    # ...  

您实际需要观察text属性以检测更改:

<MyLayout@BoxLayout>:  
    # ...  

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

    # ... 

答案 1 :(得分:0)

我实现了以下行为:

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

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

spinInstance = Spinner()
spinInstance.bind(text=callback)
每次单击微调器中的项目时,都会调用

print(instance,value)。