Задача 2
Продолжал добавлять виджеты DatosLayoutCI к последнему виджету, gr_ly
Решение
Чтобы отобразить весь материал (МАТЕРИАЛЫ) в каждом разделе (SECCIONES), необходимо использовать либо один оператор SQL с INNER JOIN, либо два оператора SELECT (вложенные SELECTs).
Snippets - вложенные SELECTs
def selection_data_secciones(self):
self.mainwid.dataBase = sqlite3.connect("UserData")
self.mainwid.dataCursor = self.mainwid.dataBase.cursor()
self.mainwid.dataCursor.execute("SELECT * FROM SECCIONES") # Sections
fetch = self.mainwid.dataCursor.fetchall()
for i in fetch:
self.LayoutGeneralCI = LayoutGeneralCI(self.mainwid)
ref_idd = i[1]
gr_ly = GridLayout(id=i[1], rows=1)
...
self.mainwid.dataCursor.execute("SELECT * FROM MATERIALES WHERE id=?", (gr_ly.id))
materials = self.mainwid.dataCursor.fetchall()
for produ in materials:
self.DatosLayoutCI = DatosLayoutCI(self.mainwid) # Datos = Data
...
gr_ly.add_widget(self.DatosLayoutCI)
self.mainwid.dataBase.commit() #DISCOMMENT NECCESARY
self.mainwid.dataBase.close()
Задача 1
self.LayoutGeneralCI.ids.var.add_widget(self.DatosLayoutCI)
File "kivy\properties.pyx", line 841, in kivy.properties.ObservableDict.__getattr__
AttributeError: 'super' object has no attribute '__getattr__'
Причина
Идентификаторы, созданные в скрипте Python, отличаются от идентификаторов, созданных в файле kv.
Kivy Documentation
Kv Language »Ссылки на виджеты
Kv Language »Доступ к виджетам, определенным внутри Kv lang в вашем коде Python
Различия
файл kv
- При назначении значения идентификатору, помните, что значение не является строкой. Кавычек нет: хорошо ->
id: value
, плохо -> id: 'value'
- Получите доступ к нему в скрипте Python, используя
self.ids.realll
или self.ids['realll']
- Когда ваш файл kv анализируется, kivy собирает все виджеты, помеченные идентификаторами, и помещает их в это свойство
self.ids
словаря. Это означает, что вы также можете перебирать эти виджеты и обращаться к ним в стиле словаря.
py файл
-
id
- это строка
- Невозможно получить к нему доступ, используя
self.ids.var
- Не хранится в
self.ids
Решение
gr_ly = GridLayout(id=str(i[1]))
#####adding a widget to the personalized id of layout
gr_ly.add_widget(self.DatosLayoutCI)
self.LayoutGeneralCI.ids.realll.add_widget(gr_ly)
#######all the code is in a function so i want to créate a layout that will #######contain the widgets with a personalized id and then calling the #######personalized id to add the widget in different and specific layouts##
####defining the layout and it's personalized id and adding to the class
gr_ly = GridLayout(id=str(i[1]))
#####adding a widget to the personalized id of layout
gr_ly.add_widget(self.DatosLayoutCI)
self.LayoutGeneralCI.ids.realll.add_widget(gr_ly)#####1 PRIMERA OPCION