我的级联旋转器在主旋转器的第二次释放时执行我想要的操作。
我如何在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()
答案 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)。