#python #kivy #kivy-language #kivymd
Вопрос:
class NavigationDrawer(MDApp):
def build(self):
return Builder.load_string(KV)
def on_start(self):
files=[{"price":"890" , "meter" : "36" , "elevator" : "True"}]
for file in files:
first_base_el = MDCard(size_hint=(1, None), size=(self.root.width,
self.root.height / 4))
second_base_el =BoxLayout(orientation='vertical')
for element in file.keys() :
external_el = MDRectangleFlatButton(
text=f'{element} : {file[element]}',
size_hint=(1, .2)
)
second_base_el.add_widget(external_el)
first_base_el.add_widget(second_base_el)
self.root.ids.container.add_widget(first_base_el)
Я получаю эту ошибку : self.ids[элемент] = weakref.ref(external_el)
Ошибка атрибута: объект ‘NavigationDrawer’ не имеет атрибута ‘идентификаторы’
Ответ №1:
«Идентификатор», назначенный из кода python, не работает как «идентификатор» из kivy lang, лучший способ ссылаться на виджет, добавленный из кода python, — это использовать атрибут «дети» или «родитель», получить нужный виджет из дерева виджетов и использовать его по вызову или по объекту
В вашем примере в «first_base_el» есть добавленные вами виджеты, поэтому для получения уже добавленного виджета вам следует использовать:
B=first_base_el.дети
Card=B[0] #это равно виджету «second_base_el»
Ответ №2:
Да , это потому, что прямо не в строке self.root.ids.container.add_widget(first_base_el)
self ссылается на класс приложений, и затем вы получаете доступ к корню класса приложений, который является самим собой.
У класса приложений нет никакого атрибута ids
. Только классы виджетов будут иметь атрибут id для доступа