Atributo de cambio en Kivy

Así que soy nuevo en Kivy y Python OOP en este caso quiero pasar algo de método a un init, este es mi código

class MyLayout3(Screen):
def __init__(self,**kwargs):
    super().__init__()
    self.gd = GridLayout()
    self.gd.cols=1
    self.tab = Label(halign="center", valign="middle",text='hmm')
    self.gd.add_widget(self.tab)
    self.add_widget(self.gd)
def showTable(self,data):
    #change to string
    print(data)
    MyLayout3().tab.text = data

en mi archivo .kv en esta clase sólo tengo:

:
    name:'third'

digamos, cuando estoy imprimiendo datos de showTable, funciona bien, pero cuando estoy tratando de pasar a init, no será nada (Blank) pero la pantalla cambia, estoy trabajando kivy así que creo que podría usar algo de ayuda con personas que se acostumbran a él

Pregunta hecha hace 3 años, 5 meses, 0 días - Por Elina


2 Respuestas:

  • El problema que estás experimentando es que estás creando una nueva instancia de la clase MyLayout3 en el método showTable, en lugar de hacer referencia a la instancia actual. Aquí te muestro cómo puedes solucionarlo:

    • En la función `__init__`, asegúrate de pasar los argumentos `kwargs` a la función `super().__init__(kwargs)` para que los parámetros de inicialización se manejen correctamente.
    • En el método `showTable`, en lugar de crear una nueva instancia de `MyLayout3`, debes hacer referencia a la instancia actual usando `self`.

    Aquí te dejo la versión corregida del código:

    python
    class MyLayout3(Screen):
        def __init__(self,*kwargs):
            super(MyLayout3, self).__init__(*kwargs)
            self.gd = GridLayout(cols=1)
            self.tab = Label(halign="center", valign="middle", text='hmm')
            self.gd.add_widget(self.tab)
            self.add_widget(self.gd)
    
        def showTable(self, data):
            change to string        print(data)
            self.tab.text = data
    

    Al hacer estos cambios, ahora deberías poder cambiar el texto en el Label correctamente desde el método showTable.

    Espero que esta solución te sea útil. ¡Déjame saber si necesitas más ayuda!

    Respondida el Dec 18, 2020 a las 07:03 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El problema con tu código es que estás intentando acceder al atributo tab de la clase MyLayout3 desde una instancia de MyLayout3. Para acceder al atributo tab desde el método __init__, debes usar self.tab en lugar de MyLayout3().tab.

    Aquí tienes el código corregido:

    python
    class MyLayout3(Screen):
        def __init__(self, **kwargs):
            super().__init__()
            self.gd = GridLayout()
            self.gd.cols = 1
            self.tab = Label(halign="center", valign="middle", text='hmm')
            self.gd.add_widget(self.tab)
            self.add_widget(self.gd)
    
        def showTable(self, data):
            

    change to string

    print(data) self.tab.text = data

    Además, en tu archivo .kv, debes eliminar la línea name:'third' y utilizar este código para definir la pantalla:

    kv
    :
    

    Esto debería resolver el problema con el atributo de cambio en Kivy.

    Respondida el Dec 18, 2020 a las 07:08 - por Gemini

    Votos positivos: 0 | Votos negativos: 0