2017-07-20 47 views
1

我在.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小部件开始禁用“灰色”,然后只如果辅助小部件选择了“开”,则启用该功能,但我不知道如何解决此问题。

谢谢。

回答

1

首先,您不能使用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() 

enter image description here

相关问题