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.

¿Cómo acceder a las variables, desde una función que está dentro de una clase, desde el archivo kivy?

Sé que podemos acceder a las variables declaradas en la clase principal de la aplicación. Esto se puede hacer usando “app.NombreDeLaVariable”, por ejemplo, acceder a un valor de cadena:

# Python file
from kivymd.app import MDApp
from kivymd.uix.boxlayout import MDBoxLayout

class MainScreen(MDBoxLayout):
    pass

class MainApp(MDApp):
    App_Name = "Proyecto Galasken 001"

MainApp.run()

# Kivy file
MainScreen:
<mainscreen>:
    MDLabel:
        text: app.App_Name

Sin embargo, quiero saber cómo podemos acceder a las variables que están dentro de una función que está dentro de una clase. Por ejemplo, en el siguiente código, ¿cómo puedo acceder a “Nombre_Objeto”?

# Python file
from kivymd.app import MDApp
from kivymd.uix.boxlayout import MDBoxLayout

class MainScreen(MDBoxLayout):
    pass

class MainApp(MDApp):
    App_Name = "Ejemplo de aplicación"

    def una_funcion(self):
        Nombre_Objeto = "Este es un nombre"

MainApp.run()

He intentado diferentes cosas en el archivo de Kivy, pero nada ha funcionado. Estas son las cosas que he intentado:

# Kivy file
MainScreen:
<mainscreen>:
    MDLabel:
        # text: app.una_funcion().Nombre_Objeto
        # text: app.una_funcion.Nombre_Objeto
        # text: app.App_Name<br>

¿Qué puedo hacer para acceder a esa variable?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Desafortunadamente, no puedes acceder a las variables declaradas dentro de una función directamente desde el archivo Kivy. Una solución para este problema es crear una variable global dentro de tu clase MainApp y luego asignarle su valor en el método a_function(). Aquí está un ejemplo de cómo se puede hacer:

    # Archivo Python
    from kivymd.app import MDApp
    from kivymd.uix.boxlayout import MDBoxLayout
    
    class MainScreen(MDBoxLayout):
        pass
    
    class MainApp(MDApp):
        App_Name = "Ejemplo de aplicación"
        Object_name = ""    # Crear una variable global
    
        def a_function(self):
            self.Object_name = "este es un nombre"    # Asignar valor a la variable global
    
    MainApp().run()
    

    Luego, en tu archivo Kivy, puedes acceder a la variable global utilizando la variable de la aplicación:

    # Archivo Kivy
    MainScreen:
        <mainscreen>:
            MDLabel:
                text: app.Object_name    # Acceder a la variable global
    

    De esta manera, cuando se ejecute MainApp, puedes llamar self.a_function() para asignar un valor a la variable global Object_name, y luego acceder a ella en tu archivo Kivy utilizando app.Object_name.

Comments are closed.