在Kivy中,您可以从Python动态地为widget ID属性赋值。虽然可以在Python中动态创建小部件,但我无法访问那些动态创建的小部件其他属性,即更新 label.text 或检索 text_input.text 属性而不使用小部件ID self.id.text 。
我正在寻找一种在Python中放置id =“动态字符串属性”的方法,以便以后检索或更改小部件属性。看起来用户可访问的小部件需要在Python或Kivy中明确定义。
label1 = Label(text='test',...) # label1 becomes the property self.label1.text = 'new value'
label1: label1 Label: id: label1 text: 'test'
是否有另一种方法可以在动态创建的小部件中访问属性?
我尝试将id传递给函数,但是按预期的赋值操作会替换传递的信息。
答案 0 :(得分:1)
docs中解释了另一种方法:
请考虑my.kv中的以下代码:
<MyFirstWidget>:
# both these variables can be the same name and this doesn't lead to
# an issue with uniqueness as the id is only accessible in kv.
txt_inpt: txt_inpt
Button:
id: f_but
TextInput:
id: txt_inpt
text: f_but.state
on_text: root.check_status(f_but)
在myapp.py中:
class MyFirstWidget(BoxLayout):
txt_inpt = ObjectProperty(None)
def check_status(self, btn):
print('button state is: {state}'.format(state=btn.state))
print('text input text is: {txt}'.format(txt=self.txt_inpt))