我的级联微调器在主微调器的第二个版本上执行我想要的操作。
我如何才能在第一次发布时完成这项工作?
提前谢谢。这是我的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()
release
事件在微调器打开并显示选项时触发,然后再选择任何选项。在该时刻,CCD_ 2的值被设置为CCD_。选择选项后,不触发release
事件,s2.my_key
保持不变。然后,第二次单击显示s1
选项列表后,会触发第二个release
事件,并最终将值od 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")
# ...
我实现了如下行为:
def callback(instance,value):
print(instance,value)
class spinnerName(Spinner):
values = ('1','2','3')
spinInstance = Spinner()
spinInstance.bind(text=callback)
每次单击Spinner中的项目时,都会调用print(实例,值)。