Изменять другие виджеты с помощью условных выражений KivyMD

#kivy #conditional-statements #kivy-language #kivymd

#kivy #условные выражения #kivy-язык #kivymd

Вопрос:

Я пытаюсь изменить состояние MDTextField на основе состояния MDCheckbox. Изначально текстовое поле должно быть отключено и не отображаться. Желаемый результат заключается в том, что когда состояние MDCheckbox активно или истинно, MDTextField будет включено и видно, и наоборот. Я использую KVLanguage только для этой задачи.

Пока это мой код, состояние моего MDTextField остается неизменным, даже флажок активен:

  <MyContent>:    
    MDCheckbox:
        size_hint: None, None
        size: dp(50), dp(50)
        halign:'left'
        pos_hint: {"x":0, "top":0.6}
        on_state:
            if self.state == 'active': 
            root.ids.numCotiz.enabled = True ; 
            root.ids.numCotiz.opacity= 1
            #else: numCotiz.enabled = False and numCotiz.opacity= 0

    MDTextField:
        id: numCotiz
        mode: "rectangle"
        enabled: False
        opacity: 0
        multiline: 'False'
        max_text_length:10
        pos_hint: {"x":0, "top":0.6}
        hint_text: 'Agregue numero de cotizacion'
        size_hint: 0.3, 1
  

Другой альтернативой для кода в MDCheckbox является следующее:

 MDCheckbox:
        size_hint: None, None
        size: dp(50), dp(50)
        halign:'left'
        pos_hint: {"x":0, "top":0.6}
        on_active:
            numCotiz.enabled = True
            numCotiz.opacity= 1
  

С помощью этой альтернативы я получаю отображение моего текстового поля на экране, но я не знаю, как снова включить opacity = 0, когда Chechbox снова неактивен.
Я провел исследование по этому вопросу, но не могу получить желаемый результат.

Заранее большое спасибо.

Ответ №1:

Я понял это, я изменил свой код Kivy на:

 MDCheckbox:
        size_hint: None, None
        size: dp(50), dp(50)
        halign:'left'
        pos_hint: {"x":0, "top":0.6}
        on_active:
            root.on_checkbox_active(*args)
  

И добавил функцию в мой файл Python.

 class MyContent(BoxLayout):

    def on_checkbox_active(self, checkbox, value):
        if value:
            self.ids.numCotiz.enabled= True
            self.ids.numCotiz.opacity = 1
        else:
            self.ids.numCotiz.enabled = False
            self.ids.numCotiz.opacity = 0
  

Теперь это работает как по волшебству. 🙂