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.

KIVYMD: añadiendo un elemento a una lista de KivyMD desde un archivo de texto

Estoy tratando de hacer que una función de python lea elementos de un archivo .txt y luego los añada a una lista de kivymd. Hasta ahora tengo:

class ListsScreen(Screen):
    with open('lists.txt') as f:
        lines = f.readlines()
    count = 0
    for line in lines:
        count += 1
        listsitem = f'{line}'
        root.ids.container.add_widget(OneLineListItem(text=listsitem))

Sin embargo, siempre obtengo “root no está definido”. Mi archivo .KV está en un archivo .kv separado, y estoy usando ScreenManager.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema que estás enfrentando es que la variable ‘root’ no está definida. Esto se debe a que estás intentando acceder a ella fuera del alcance de la clase donde está definida. Para resolver este problema, necesitas acceder a la instancia de ScreenManager y obtener el widget con el ID especificado. Aquí está lo que debes hacer:

    class ListsScreen(Screen):
        with open('lists.txt') as f:
            lines = f.readlines()
    
        count = 0
        for line in lines:
            count += 1
            listsitem = f'{line}'
            # Obtén la instancia de ScreenManager
            screen_manager = App.get_running_app().root
            # Obtén el widget con el ID especificado
            container = screen_manager.get_screen('lists_screen').ids.container
            container.add_widget(OneLineListItem(text=listsitem))
    

    En el código anterior, estamos usando App.get_running_app().root para obtener la instancia de ScreenManager. Luego, estamos usando screen_manager.get_screen('lists_screen').ids.container para obtener la instancia del widget con el ID especificado. Finalmente, estamos agregando el widget OneLineListItem al contenedor usando container.add_widget().

Comments are closed.