2017-11-24 15 views
1

私の.kvファイルにチェックボックスがあります。ボックスがチェックされていないときに、それに関連付けられたテキスト入力を無効にします。Python(Kivy) - Pythonの.kvからのチェックボックスの値を確認する

私の.pyコード

if self.ids.checkbox.active==False: 
    self.ids.input.disabled==True 
else: 
    self.ids.input.disabled==False 

マイ.kvコード

TextInput: 
     id: input 
     text: "2fbd3320a168d5c2e35" 
     pos_hint: {"x":0.1, "y":0.4} 
     size_hint: 0.5,0.05 
     background_disabled_normal: "" 

    CheckBox: 
     id: checkbox 
     pos_hint: {"x":0.6, "y":0.4} 
     size_hint: 0.05,0.05 

私はの.pyコードが関数になっている必要があり、これを行うことについては移動する方法を知りませんが、チェックボックスを行いますon_release属性を保持しません。

答えて

1

イベント(checkbox.active)を対応するコールバックに関連付ける必要があります。あなたはbindを使用しての.pyファイルでそれを行うことができます。

from kivy.app import App 
from kivy.lang import Builder 
from kivy.uix.floatlayout import FloatLayout 

kv_text = """\ 
<MyWidget> 
    TextInput: 
     id: input 
     text: "2fbd3320a168d5c2e35" 
     pos_hint: {"x":0.1, "y":0.4} 
     size_hint: 0.5,0.05 
     background_disabled_normal: "" 
     disabled: True 

    CheckBox: 
     id: checkbox 
     pos_hint: {"x":0.6, "y":0.4} 
     size_hint: 0.05,0.05 
""" 

class MyWidget(FloatLayout): 
    def __init__(self, **kwargs): 
     super(MyWidget, self).__init__(**kwargs) 
     self.ids.checkbox.bind(active=self.disable_input) 

    def disable_input(self, checkbox, checked): 
     self.ids.input.disabled = not checked 


class MyWidgetApp(App): 
    def build(self): 
     return MyWidget() 

def main(): 
    Builder.load_string(kv_text) 
    app = MyWidgetApp() 
    app.run() 

if __name__ == '__main__': 
    main() 

別のオプションは、.kvファイルでそれを行うことです。

from kivy.app import App 
from kivy.lang import Builder 
from kivy.uix.floatlayout import FloatLayout 

kv_text = """\ 
<MyWidget> 
    TextInput: 
     id: input 
     text: "2fbd3320a168d5c2e35" 
     pos_hint: {"x":0.1, "y":0.4} 
     size_hint: 0.5,0.05 
     background_disabled_normal: "" 
     disabled: not checkbox.active  # <<<<<<<<< 

    CheckBox: 
     id: checkbox 
     pos_hint: {"x":0.6, "y":0.4} 
     size_hint: 0.05,0.05 
""" 

class MyWidget(FloatLayout): 
    pass 


class MyWidgetApp(App): 
    def build(self): 
     return MyWidget() 

def main(): 
    Builder.load_string(kv_text) 
    app = MyWidgetApp() 
    app.run() 

if __name__ == '__main__': 
    main() 

enter image description here

+0

youreの最善を;) – Michael

関連する問題