Kivy - 在根类之外访问小部件的id

时间:2018-03-02 16:29:48

标签: python kivy kivy-language

我希望检索窗口小部件的ID,以便在根类的窗口外部中访问其text属性。我理解为了影响或检索具有来自kv-lang的id的项目,可以使用以下语法:

self.ids.some_id.some_attribute = new_value

当在根类中使用时,这非常有效,因为它的所有子节点都可以访问。但是在窗口小部件类中,该类仅引用声明的窗口小部件,因此它之外的任何ID都超出了范围。

<Root>:
    ...
        SomeButton:
           ...
        TextInput:
            id: some_id

什么不起作用:

class SomeButton(Button):
    def on_press(self):
        print(self.ids.some_id.text)

正如我所提到的,这是可以理解的。但我不知道在这种情况下使用了什么。任何帮助将不胜感激:)

2 个答案:

答案 0 :(得分:0)

问题是ids是规则的本地,而不是小部件。

此处您的规则是为<Root>声明的,因此要访问它,您必须使用对此窗口小部件的引用,而不是按钮。

如果您想将some_id的引用添加到按钮,可以在按钮中添加属性。

class SomeButton(Button):
    target = ObjectProperty()
    def on_press(self):
        print self.target.text

并以kv。

将它们链接在一起
<Root>:
...
    SomeButton:
        target: some_id

    TextInput:
        id: some_id

答案 1 :(得分:0)

我是kivy的新手,但我认为TextInput不是SomeButton的子窗口小部件,但你还是试图从Button访问它。这是你的问题。

尝试self.parent.ids.some_id.text