假设我有一个字符串,我用它为一些Kivy
小部件设置一个值。如何让所有小部件对该字符串的更改做出反应?
我可以为每个小部件创建该字符串属性,但是如果我更改一个小部件的属性,则具有相同属性的其他小部件将不会相应地更改。
我想要的行为就像列表引用:
st = ["1"]
st1 = st
st.append("2")
print(st1, st) # output: ['1', '2'] ['1', '2']
如您所见,当我更改列表st
时,列表st1
也会发生变化。这是因为st1
是对列表的引用。如何将此行为应用于字符串?可能使用Kivy
,如果Python的标准库没有办法实现我想要的东西
这是Kivy的演示:
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.textinput import TextInput
class TestApp(App):
def change_text(self, bt):
self.string += "!"
print(self.string)
def build(self):
self.string = "Hello"
lb = Label(text = self.string)
bt = Button(on_press = self.change_text)
tx = TextInput(text = self.string)
bl = BoxLayout()
bl.add_widget(lb)
bl.add_widget(tx)
bl.add_widget(bt)
return bl
TestApp().run()
因此,当按下按钮时,应用的属性string
会发生变化,但我希望该更改会反映在左侧的小部件上(Label
,TextInput
)
答案 0 :(得分:0)
在kivy中你可以使用属性(不要与python属性混淆,这是一个完全不同的东西)。在kv语言中,您应该能够执行以下操作:
MainWidget:
id: "main"
mystring: "asdf"
widget1:
content: main.mystring
widget2:
content: main.mystring
...
在properties的kivy文档中阅读更多内容。