Kivy:在 python 代码中设置小部件禁用属性
Posted
技术标签:
【中文标题】Kivy:在 python 代码中设置小部件禁用属性【英文标题】:Kivy: set widget disabled property in python code 【发布时间】:2021-03-11 07:21:35 【问题描述】:我在 kivy lang 文件中有这样的东西(伪代码)
<RootWidget>:
Checkbox:
id: chkbox
TextInput:
id: in_text
text: ""
Button:
id: ok_btn
label: "Okay"
on_press: app.ok_pressed()
disabled: chkbox.active or len(in_text.text) > 8 and ...
关键是,ok_btn 需要根据其他几个小部件的状态动态启用和禁用。
这一切都按预期工作,但现在我遇到了问题。由于复杂的原因,我需要创建按钮并将其插入到 python 的根小部件中,而不是在 .kv 文件或字符串中定义它。我不知道如何处理 disabled 属性。如果我将其设置为属性
btn = Button()
btn.disabled = ...
这仅设置初始状态。我想也许
btn.bind(on_disabled=some_function)
但这只是在按钮被禁用时做一些事情,而不是定义何时应该禁用它。同上 on_state。我也试过了
btn.bind(disabled=some_function)
some_function 永远不会被调用
提前感谢任何指针
【问题讨论】:
【参考方案1】:听起来你倒退了:你想绑定的不是按钮的 disabled 属性,而是你想绑定到 other 的东西,这样当他们改变按钮的disabled 属性得到更新。
例如,从您的原始示例中,自动生成的代码类似于chkbox.bind(active=lambda self: setattr(ok_btn, "disabled", self.active)
(实际上不是此代码,而是等效的代码)。您需要手动复制它。
当然,您可以通过各种方式对其进行抽象。例如,您可以绑定您关心的所有条件来更新 App 类的属性(以便它始终存在以更新,无论您的按钮是否存在),然后在您的按钮中使用类似 disabled: app.that_property
的 kv 规则。不过,这不是唯一的选择。
【讨论】:
以上是关于Kivy:在 python 代码中设置小部件禁用属性的主要内容,如果未能解决你的问题,请参考以下文章