Python 如何根据Kivy中另一个小部件的值禁用小部件
我在.kv文件中有一个微调器小部件,我需要这个微调器的值来启用另一个微调器小部件 这是我尝试过的代码,它不起作用,并给我一个语法错误:Python 如何根据Kivy中另一个小部件的值禁用小部件,python,python-2.7,kivy,kivy-language,Python,Python 2.7,Kivy,Kivy Language,我在.kv文件中有一个微调器小部件,我需要这个微调器的值来启用另一个微调器小部件 这是我尝试过的代码,它不起作用,并给我一个语法错误: CustLabel: text: "Aux LO Pump Status" CustSpinner: id: auxlo text: "Select" values: ('On', 'Off') focus: True on_state: (self.auxlonum.disabled) if (self.au
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小部件先禁用并“变灰”,然后只有在auxlo小部件选择了“开”时才启用,但我不确定如何执行此操作
谢谢。首先,您不能对状态事件使用
,因为它在您选择一个值之前发出。您需要在事件上使用
另一方面,self.auxlonum
是一种不正确的语法,您应该使用id
仅指kv中的任何小部件
最后,您只需使用三元运算符语法即可执行所需操作:
Spinner:
id: auxlo
on_text: 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()
从kivy.app导入应用
从kivy.uix.boxlayout导入boxlayout
从kivy.lang导入生成器
Builder.load_字符串(“”)
方向:“垂直”
微调器:
id:auxlo
文本:“选择”
值:(“开”、“关”)
焦点:正确
如果auxlo.text=='Off'否则为False,则on_text:auxlonum.disabled=True
标签:
微调器:
id:auxlonum
文本:“选择”
值:(“#1”和“#2”)
焦点:正确
标签:
''')
类MyWidget(BoxLayout):
通过
类TestApp(应用程序):
def生成(自):
返回MyWidget()
TestApp().run()
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()