Как перебрать разные уровни идентификаторов, используя слабый реф в киве - PullRequest
0 голосов
/ 13 марта 2020

У меня есть эта последовательность идентификаторов .

self.ids.cuarta_pantalla.ids.container.ids.pre_1.ids.Si

В этом случае контейнер имеет 70 различных идентификаторов [от pre_1 до pre_70 ] и каждый pre_ (x) имеет три разных идентификатора [ Si , MasMenos , No ], которые соответствует группе CheckBoxes .

Если я хочу узнать состояние одного флажка, используя его атрибут значение , я вынужден написать все утверждение вот так.

self.ids.cuarta_pantalla.ids.container.ids.pre_1.ids.Si.value.

Итак, как я могу перебрать идентификаторы?

Я пытался использовать квадратные скобки self.ids.cuarta_pantalla.ids.container.ids['pre_1'], но он возвращает то, что я не могу вызвать метод.

Печать в квадратных скобках: <weakref at 0x125F7118; to 'BoxLayout' at 0x125F30D0>

Печать с точечной нотацией: <kivy.uix.boxlayout.BoxLayout object at 0x125F30D0>

Вот как я создал объекты:

for idx in range(70):

  BoxContainer = BoxLayout()

  # Repeat this two more times with MasMenos and No

  check1 = CheckBox(group= f"p_{idx+1}")
  BoxContainer.add_widget(check1)
  BoxContainer.ids['Si'] = weakref.ref(check1)


  #Adding the BoxContainer with CheckBoxes to the container

  self.ids.cuarta_pantalla.ids.container.add_widget(BoxContainer)
  self.ids.cuarta_pantalla.ids.container.ids[f'pre_{idx+1}'] = weakref.ref(BoxContainer)

1 Ответ

0 голосов
/ 24 марта 2020

Нет необходимости использовать weakref , каждый раз, когда используется add_widget, список наблюдаемых , вызываемый children в объекте, в который был добавлен другая будет содержать ссылку на этот добавленный объект.

Например:

IDlist = self.ids.cuarta_pantalla.ids.container.children

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

...