如何在python + kivy中动态访问小部件的属性

时间:2019-04-27 17:42:14

标签: python kivy

我正在使用python在kivy中动态添加小部件,并希望能够访问id,text等属性。

self.ids.grid.cols = 4
        for i in range(12):
            self.ids.grid.add_widget(TextInput(id = str(i+1), text = 'Teste'))

我尝试了

print(self.ids.grid.1)

print(self.ids.grid.'1')    



self.ids.grid.cols = 4
        for i in range(12):
            self.ids.grid.add_widget(TextInput(id = str(i+1), text = 'Teste'))

我希望能够将数据写入数据库,但是首先我需要访问小部件

2 个答案:

答案 0 :(得分:1)

使用for循环访问idtext

for child in reversed(self.ids.grid.children):
    if isinstance(child, TextInput):
        print(f"child: id={child.id}, text={child.text}")

py:id与kv:id

py-id

  • 在Python脚本中创建的id的值是一个字符串。
  • 用Python脚本创建的id未存储在self.ids字典类型属性中。
  • 一个人不能使用此id(例如id='ti')来引用对象及其属性,例如self.ids.tiself.ids['ti']

kv-id

  • 在kv文件中创建的id的值是 不是 一个字符串。
  • 在kv文件中声明的id存储在self.ids字典类型属性中。
  • 一个人可以使用此id(例如id: ti)来引用对象及其属性,例如self.ids.tiself.ids['ti']

参考

Kv language » Referencing Widgets

  

id分配值时,请记住该值不是   串。没有引号:

     

好-> id: value

     

不好-> id: 'value'

答案 1 :(得分:0)

我通常将它们添加到字典或列表中,以较方便的为准。 这当然意味着要在构造函数中添加新列表

self.text_inputs = []

然后将小部件添加到其中

self.ids.grid.cols = 4
    for i in range(12):
        text_input = TextInput(id = str(i+1), text = 'Teste')
        self.text_inputs.append(text_input)
        self.ids.grid.add_widget(text_input)

然后使用

轻松访问它
print(self.text_inputs[1].text) 
相关问题