2017-11-24 1 views
1

.kv 파일에 체크 박스가 있는데이 체크 박스가 선택되어 있지 않으면 관련 텍스트 입력을 비활성화하려고합니다.Python (Kivy) - 파이썬에서 .kv의 체크 박스 값을 확인하십시오.

내 평 코드

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 

가의 평 코드가 함수에 있어야하지만, 체크 박스가 할 on_release 속성을 포함하지 않습니다.

답변

1

이벤트 (checkbox.active)를 해당 콜백과 연결해야합니다. 당신은 bind를 사용하여 평 파일에 작업을 수행 할 수 있습니다

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

개봉 된 최고) – Michael

관련 문제