#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
Теперь это работает как по волшебству. 🙂