使用StringpPoperty和ID更新Kivy文本变量

时间:2019-05-27 04:55:21

标签: python kivy kivy-language

所以我的问题是如何更新文本以添加标签。我应该在KV文件和字符串属性中使用id:s还是还有其他方法?

Main.Py

    print_label = StringProperty()

    print_label = lyrics

class MyApp(App):
    def build(self):
        Window.clearcolor = (.13, .13, .13, 1)
        return MyFloatLayout()```
my.kv
```<Button>:
    font_size: 40
    color: 0.1,0.5,0.6,1
    size_hint: 0.3, 0.1



<FloatLayout>:
    print_label: print_label

    Label:
        pos_hint:{"top":1}
        id: print_label
        text: ""


    Button:
        pos_hint:{"bottom":1}
        text: "RE-SEARCH"
        font_size: 10
        on_press: root.btn()

2 个答案:

答案 0 :(得分:0)

您需要确定希望print_labelStringProperty还是ObjectProperty。您当前在kv中使用ObjectProperty,在python中使用StringProperty
如果要使用StringProperty,可以将其直接设置为text属性。 text = root.print_label。 如果将其用作ObjectProperty,则将其绑定到对象。而且,您可以访问对象属性,例如文本print_label.text = "something"。 因此,您需要选择自己想要print_label成为什么样的人。

答案 1 :(得分:0)

问题-更新标签的文本

  

如何更新文本以添加标签。我应该在KV文件和字符串中使用id:s吗?   财产还是还有其他方法?

解决方案

此问题有三个选择。

选项1-使用ids

使用ids的优点是该应用程序较小,即使用的编码和属性较少。

  

ID是对窗口小部件的弱引用,而不是窗口小部件本身。作为一个   因此,存储ID不足以阻止小部件   被垃圾收集。

     

...

     

self.ids方法非常简洁。

代码段-py文件

class FloatLayout(FloatLayout):
    ...
    self.ids.print_label.text = lyrics

摘要-kv文件

<FloatLayout>:

    Label:
        pos_hint:{"top":1}
        id: print_label
        text: ""

选项2-使用Stringproperty

类型为Stringproperty的属性会产生一个事件,使得当该属性的值更改时,所有引用该属性的属性都会自动更新。

代码段-py文件

class FloatLayout(FloatLayout):
    print_label = StringProperty('')
    ...
    self.print_label = lyrics

摘要-kv文件

<FloatLayout>:

    Label:
        pos_hint:{"top":1}
        text: root.print_label

选项3-使用Objectproperty

使用Objectproperty链接一个Label小部件,还需要在kv文件中声明一个id

  

尽管self.ids方法非常简洁,但通常   被视为使用ObjectProperty的“最佳做法”。这创建了一个   直接引用,提供更快的访问权限,并且更明确。

代码段-py文件

class FloatLayout(FloatLayout):
    print_label = ObjectProperty(None)
    ...
    self.print_label.text = lyrics

摘要-kv文件

<FloatLayout>:
    print_label: print_label

    Label:
        pos_hint:{"top":1}
        id: print_label
        text: ""