Как установить идентификатор виджета kivy из файла кода Python - PullRequest
0 голосов
/ 03 сентября 2018

Мне нужна помощь в назначении идентификаторов новым kivy виджетам, созданным из функции python

Я пробовал:

old = Label(id = 'old')

и:

old = Label()
old.id = 'old'

но это, похоже, не работает, потому что всякий раз, когда я пытаюсь ссылаться на виджеты, это выдает мне ошибку

Ответы [ 3 ]

0 голосов
/ 03 сентября 2018

@ Иколим верен, но есть очень уродливый и не рекомендуемый способ выполнить то, что вы хотите:

import weakref

old = Label()
self.ids.add_widget(old)
self.ids['old'] = weakref.ref(old)

Это фактически добавляет идентификатор old в словарь (при условии, что self - правильный контейнер). Лучшим способом было бы просто сохранить ссылку на old Label.

0 голосов
/ 07 октября 2018

Для виджетов, которые создаются на стороне Python динамически, они не будут найдены в self.ids. Вместо этого вам нужно перебрать self.children, чтобы найти идентификатор, назначенный виджету. Например:

for child in self.children:
    if child.id == 'old':
        print child.text
        print 'Text found.'
        break
0 голосов
/ 03 сентября 2018

Способы создания id в коде Python правильны.

Но вы не можете ссылаться на них, используя self.ids.old или self.ids['old'], потому что они не существуют в self.ids. Свойство типа словаря self.ids содержит только все виджеты, отмеченные идентификаторами, определенными в файле kv.

Для ссылки id, определенной в коде Python, в этом примере используйте self.old.

Доступ к виджетам, определенным внутри Kv lang в вашем коде Python

Когда ваш файл kv анализируется, kivy собирает все виджеты с тегами идентификаторы и помещает их в это self.ids свойство типа словаря. Тот означает, что вы также можете перебирать эти виджеты и получать к ним доступ стиль словаря.

...