¿Cómo cambiar el texto de una etiqueta de kivy desde un archivo de python?
No puedo encontrar la respuesta a este problema. He buscado en publicaciones similares pero no funcionaron para mí. Aquí hay un breve fragmento de código en el que creo que tengo que trabajar:
points = "12"
class MainApp(MDApp):
root.ids.points_label.text = points
def build(self):
return Builder.load_file("main.kv")
KV:
MDFloatLayout:
MDLabel:
text:
id: points_label
pos_hint: {"center_x": .5, "center_y": .5}
También estoy usando KivyMD, por lo que eso podría tener un efecto en el proceso, no lo sé. Llevo tiempo atascado/a en esto, espero que puedas ayudar.
Objetivo:
Intentando establecer una variable como texto de una etiqueta en Kivy MD.
Aquí está el código después de las ediciones sugeridas, pero ahora muestra una pantalla en blanco de KivyMD. Aquí está el código que se necesita:
points = "12"
class MyFloatLayout(MDFloatLayout):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.points_label_text = points
class MainApp(MDApp):
def build(self):
return Builder.load_file("main.kv")
INFO: Points = 12 solo para este ejemplo
KV:
<myfloatlayout>
MDLabel:
text: root.points_label_text
pos_hint: {"center_x": .5, "center_y": .5}
Este código sigue sin funcionar. Aquí está la importación en el archivo de Python para la clase de KivyMD, en caso de que ese sea el problema.
from kivymd.uix.floatlayout import MDFloatLayout
Espero que puedas obtener respuestas de mi publicación actualizada.
davy.ai
Solución
Parece que el problema está en establecer el texto de la etiqueta usando
root.ids
en la claseMainApp
. En su lugar, puedes crear una nueva clase que herede deMDFloatLayout
y definir el texto de la etiqueta en su constructor, luego podrás acceder a ella en el archivo KV usandoroot.point_label_text
.Aquí está el código actualizado:
Y el archivo KV actualizado:
Esto debería establecer el texto de la etiqueta con el valor de
points
, que actualmente está establecido en “12”. Si deseas cambiar el texto de la etiqueta dinámicamente, puedes actualizar la propiedadpoint_label_text
en la claseMyFloatLayout
.Ten en cuenta que la declaración de importación para
MDFloatLayout
es correcta en tu fragmento de código original.