Как получить динамический доступ к свойствам виджетов в python + kivy - PullRequest
0 голосов
/ 27 апреля 2019

Я добавляю виджеты динамически в kivy, используя python, и хотел бы иметь возможность доступа к таким свойствам, как id, текст и т. Д.

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 ]

1 голос
/ 27 апреля 2019

Используйте цикл for для доступа к id и text.

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

  • Значение id, созданное в скрипте Python, является строкой.
  • id, созданное в скрипте Python, не сохраняется в свойстве типа self.ids словаря.
  • Нельзя использовать это id (например, id='ti') для ссылки на объект и его атрибуты, например, self.ids.ti или self.ids['ti']

kv - id

  • Значение id, созданное в файле kv, равно , а не строка.
  • id, объявленное в файле kv, сохраняется в self.ids свойство типа словаря.
  • Можно использовать это id (например, id: ti) для ссылки на объект и его атрибуты, например, self.ids.ti или self.ids['ti']

Ссылки

Kv language »Ссылки на виджеты

При назначении значения id помните, что значение не является строкой.Кавычек нет:

хорошо -> id: value,

плохо -> id: 'value'

0 голосов
/ 27 апреля 2019

Я обычно добавлял их в диктовку или список, в зависимости от того, что удобнее.Это, конечно, означает добавить новый список в конструктор

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) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...