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étodoshowTable
, 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 = dataAl 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 claseMyLayout3
desde una instancia deMyLayout3
. Para acceder al atributotab
desde el método__init__
, debes usarself.tab
en lugar deMyLayout3().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 = dataAdemás, en tu archivo
.kv
, debes eliminar la líneaname:'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