【问题标题】:Kivy: set widget disabled property in python codeKivy:在 python 代码中设置小部件禁用属性
【发布时间】: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 永远不会被调用

提前感谢任何指针

【问题讨论】:

    标签: python widget kivy bind


    【解决方案1】:

    听起来你倒退了:你想绑定的不是按钮的 disabled 属性,而是你想绑定到 other 的东西,这样当他们改变按钮的disabled 属性得到更新。

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

    当然,您可以通过各种方式对其进行抽象。例如,您可以绑定您关心的所有条件来更新 App 类的属性(以便它始终存在以更新,无论您的按钮是否存在),然后在您的按钮中使用类似 disabled: app.that_property 的 kv 规则。不过,这不是唯一的选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-12
      • 1970-01-01
      • 2015-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-12
      相关资源
      最近更新 更多