我如何根据 Kivy 中另一个小部件的值禁用一个小部件
how do i disable a widget based on the value of another widget in Kivy
我在 .kv 文件中有一个 Spinner 小部件,我需要这个 Spinner 的值来启用另一个 Spinner 小部件。
这是我试过的代码,它不起作用并给我一个语法错误:
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 小部件从禁用开始,然后 'greyed out' 然后只有在 auxlo 小部件选择了 'on' 时才启用,但是我不确定如何去做。
谢谢。
首先,您不能使用 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()
我在 .kv 文件中有一个 Spinner 小部件,我需要这个 Spinner 的值来启用另一个 Spinner 小部件。
这是我试过的代码,它不起作用并给我一个语法错误:
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 小部件从禁用开始,然后 'greyed out' 然后只有在 auxlo 小部件选择了 'on' 时才启用,但是我不确定如何去做。
谢谢。
首先,您不能使用 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()