繁体   English   中英

Kivy:在 python 代码中设置小部件禁用属性

[英]Kivy: set widget disabled property in python code

我在 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 需要根据其他几个小部件的 state 动态启用和禁用。

这一切都按预期工作,但现在我遇到了问题。 由于复杂的原因,我需要创建按钮并将其插入到 python 的根小部件中,而不是在 .kv 文件或字符串中定义它。 我不知道如何处理 disabled 属性。 如果我将其设置为属性

btn = Button()
btn.disabled = ...

这仅设置初始 state。 我想也许

btn.bind(on_disabled=some_function)

但这只是在禁用按钮时执行某些操作,而不是定义何时应该禁用它。 同上 on_state。 我也试过

btn.bind(disabled=some_function)

some_function 永远不会被调用

提前感谢任何指针

听起来您倒退了:您想要绑定的不是按钮的禁用属性,而是您想要绑定到其他东西,以便当它们更改按钮的禁用属性时得到更新。

例如,从您的原始示例中,自动生成的代码chkbox.bind(active=lambda self: setattr(ok_btn, "disabled", self.active) (实际上不是此代码,而是等效的代码)。您需要手动复制这个。

当然,您可以通过各种方式对其进行抽象。 例如,您可以绑定您关心的所有条件来更新您的应用程序disabled: app.that_property的属性(这样无论您的按钮是否存在,它总是存在更新),然后在您的按钮。 不过,这不是唯一的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM