我如何禁用基于Kivy中另一个小部件的值的小部件
问题描述:
我在.kv文件中有一个Spinner小部件,我需要此Spinner的值来启用另一个Spinner小部件。我如何禁用基于Kivy中另一个小部件的值的小部件
这是我尝试过的代码,它不工作,并给了我一个语法错误:
CustLabel:
text: "Aux LO Pump Status"
CustSpinner:
id: auxlo
text: "Select"
values: ('On', 'Off')
focus: True
on_state: (self.auxlonum.disabled) if (self.auxlo == 'off')
CustLabel:
text: "Aux LO Pump Number"
CustSpinner:
id: auxlonum
text: "Select"
values: ('# 1', '# 2')
focus: True
我真的喜欢auxlonum小部件开始禁用“灰色”,然后只如果辅助小部件选择了“开”,则启用该功能,但我不知道如何解决此问题。
谢谢。
答
首先,您不能使用on_state
事件,因为它在您选择一个值之前发出。您需要使用on_text
事件。
另一方面,self.auxlonum
是一个不正确的语法,你应该只使用id
来引用kv中的任何小部件。
最后,你只需要使用三元运算符语法做你想做什么:
Spinner:
id: auxlo
on_text: auxlonum.disabled = True if auxlo.text == 'Off' else False
或者:
Spinner:
id: auxlonum
disabled: True if auxlo.text == 'Off' else False
可执行例如:
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
Builder.load_string('''
<MyWidget>
orientation: 'vertical'
Spinner:
id: auxlo
text: "Select"
values: ('On', 'Off')
focus: True
on_text: auxlonum.disabled = True if auxlo.text == 'Off' else False
Label:
Spinner:
id: auxlonum
text: "Select"
values: ('# 1', '# 2')
focus: True
Label:
''')
class MyWidget(BoxLayout):
pass
class TestApp(App):
def build(self):
return MyWidget()
TestApp().run()