Error: el objeto ‘super’ no tiene ningún atributo ‘__getattr__’ en kivymd
Escribí una aplicación Kiwi que tiene dos páginas.
La primera página contiene solo un botón para ir a la siguiente página.
La segunda página es una lista de iconos y títulos.
Funcionaba bien cuando la aplicación solo tenía una página, pero obtengo un error al agregar la primera página como menú.
¿Cómo puedo solucionarlo?
El error está en la línea 51 que especifiqué.
Error:
'super' object has no attribute '__getattr__'
from kivy.lang import Builder
import glob
from kivymd.app import MDApp
from kivymd.uix.list.list import TwoLineAvatarListItem
from kivymd.uix.list.list import ImageLeftWidget
from kivy.uix.screenmanager import ScreenManager, Screen
KV = '''
ScreenManager:
MenuScreen:
CoinScreen:
:
name: "menu"
MDRoundFlatButton:
text: "SelectCoin"
pos_hint: {"center_x": .2, "center_y": .8}
on_press: root.manager.current = 'select_coin'
:
name: "select_coin"
ScrollView:
MDList:
id: text_container
'''
class MenuScreen(Screen):
pass
class CoinScreen(Screen):
pass
sm = ScreenManager()
sm.add_widget(MenuScreen(name='main'))
sm.add_widget(CoinScreen(name='select_coin'))
class Test(MDApp):
def build(self):
return Builder.load_string(KV)
def on_start(self):
icon_path = glob.glob("icon/*.png")
for _ in range(len(icon_path)):
icon_path[_] = icon_path[_].replace("\\", "//")
for i in icon_path:
icons = ImageLeftWidget(source=i)
items = TwoLineAvatarListItem(text=i + ' item', secondary_text= "Secondary text here")
items.add_widget(icons)
self.root.ids.text_container.add_widget(items) #**********error**********
Test().run()
davy.ai
El mensaje de error es: ‘super’ object has no attribute ‘getattr‘. Este error está relacionado con el acceso a un atributo que no existe. En este caso, parece que el atributo ‘ids’ no está siendo reconocido en la raíz, lo cual está causando que la aplicación falle.
Una posible solución es agregar un id al ScreenManager y usarlo para hacer referencia al widget raíz:
Luego, en el método ‘on_start’, usa el siguiente código para hacer referencia al widget raíz:
reemplazar con:
Esto debería resolver el error y permitir que la aplicación funcione correctamente.