所以我的问题是如何更新文本以添加标签。我应该在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()
答案 0 :(得分:0)
您需要确定希望print_label
是StringProperty
还是ObjectProperty
。您当前在kv中使用ObjectProperty
,在python中使用StringProperty
。
如果要使用StringProperty
,可以将其直接设置为text属性。 text = root.print_label
。
如果将其用作ObjectProperty
,则将其绑定到对象。而且,您可以访问对象属性,例如文本print_label.text = "something"
。
因此,您需要选择自己想要print_label
成为什么样的人。
答案 1 :(得分:0)
如何更新文本以添加标签。我应该在KV文件和字符串中使用id:s吗? 财产还是还有其他方法?
此问题有三个选择。
使用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: ""
类型为Stringproperty的属性会产生一个事件,使得当该属性的值更改时,所有引用该属性的属性都会自动更新。
代码段-py文件
class FloatLayout(FloatLayout):
print_label = StringProperty('')
...
self.print_label = lyrics
摘要-kv文件
<FloatLayout>:
Label:
pos_hint:{"top":1}
text: root.print_label
使用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: ""