es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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()
Tags:  , ,

Answer

  1. Avatar for 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:

    ScreenManager:
        id: sm
        MenuScreen:
        CoinScreen:
    

    Luego, en el método ‘on_start’, usa el siguiente código para hacer referencia al widget raíz:

    self.root.ids.text_container.add_widget(items)
    

    reemplazar con:

    self.root.ids.sm.current_screen.ids.text_container.add_widget(items)
    

    Esto debería resolver el error y permitir que la aplicación funcione correctamente.

Comments are closed.