kivy - 使用条件语句修改其他小部件 KivyMD
问题描述
我正在尝试根据 MDCheckbox 的状态修改 MDTextField 的状态。最初,应该禁用 TextField 并且不可见。期望的结果是,当 MDCheckbox 状态为 Active 或 True 时,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
使用这种替代方法,我确实让我的 TextField 出现在屏幕上,但是当 Chechbox 再次处于非活动状态时,我不知道如何再次打开 opacity = 0。我已经对这个问题进行了研究,但我无法得到想要的结果。
提前非常感谢。
解决方案
我想通了,我将我的 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
现在它就像一个魅力。:)
推荐阅读
- imagemagick - 使用 minimagick 和 mogrify 降低图像大小会干扰背景图像和颜色
- python - 取消从套接字接收到的对象导致“输入用完”
- java - 如何将数组的每个元素向左移动一个位置?
- node.js - Django/react Dockerfile 阶段不能一起工作
- amazon-web-services - mup.js 文件中的身份验证错误 - 流星
- c++ - 如何在 C++ 中使用派生聚合的指定初始化?
- mysql - 如何使用 node.js 将对象插入 mysql 表
- swift - 如何将对象的新实例添加到对象数组中 XCode
- c# - 统一镜子;生成不同的 Player Prefabs
- jquery - 在 MaterializeCSS 模态中调用 Summernote 弹出模态问题