2017-07-20 23 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ウィジェットを好むだろうauxloウィジェットが選択されている場合は有効になっていますが、これについてどうやって行くのか分かりませんでした。

ありがとうございます。

答えて

1

まず、on_stateイベントを使用することはできません。これは、1つの値を選択する前に発生するためです。代わりに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

関連する問題