如何在Kivy中自动更新小部件上的文本?

时间:2017-01-12 22:39:01

标签: python kivy

在app.kv文件中有一个按钮:

Button:
    text: var1

有时var1会发生变化。如何在代码中没有明确的属性赋值的情况下更改按钮(或标签等)上的文本?

2 个答案:

答案 0 :(得分:0)

当然,您可以直接进入酒店。无需执行text: var1。这些是非常常见的方式,但除了它们之外,甚至还有setattr()或其他一些方式。

通过其实例:

<Buttons_Root>:
    Button:
        id: mybutton

→py:

b = Buttons_Root()
b.ids.mybutton.text = 'something'

通过其父级:

<MyBoxLayout>:
    Button:

→py:

box = MyBoxLayout()
box.children[0].text = 'something'

答案 1 :(得分:0)

Kivy可以自动为您做到这一点 - 但前提是var1是一个kivy属性。您可以阅读有关他们的更多信息here

如果没有发生这意味着var1不是kivy属性。您必须将它们设置为类属性,例如:

class MyWidget
    var1 = NumericProperty()
    [...]

然后在kv:

MyWidget:
    Button:
        text: root.var1

或任何你想要的。只要你设置它的值是一个kivy属性,它应该工作。有时,如果右侧的值是一个复杂的值(text: "" if root.var is None else getattr("mystring", root.var)),事情就不容易解决,但如果你遇到这种情况,还有其他的stackoverflow问题可以帮助你。