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 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.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución

    Parece que el problema está en establecer el texto de la etiqueta usando root.ids en la clase MainApp. En su lugar, puedes crear una nueva clase que herede de MDFloatLayout y definir el texto de la etiqueta en su constructor, luego podrás acceder a ella en el archivo KV usando root.point_label_text.

    Aquí está el código actualizado:

    from kivymd.app import MDApp
    from kivy.lang import Builder
    from kivy.properties import StringProperty
    from kivymd.uix.floatlayout import MDFloatLayout
    
    points = "12"
    
    class MyFloatLayout(MDFloatLayout):
        point_label_text = StringProperty(points)
    
        def __init__(self, **kwargs):
            super().__init__(**kwargs)
            self.point_label_text = points
    
    class MainApp(MDApp):
        def build(self):
            return MyFloatLayout()
    
    MainApp().run()
    

    Y el archivo KV actualizado:

    <myfloatlayout>
        MDLabel:
            text: root.point_label_text
            pos_hint: {"center_x": .5, "center_y": .5}
    

    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 propiedad point_label_text en la clase MyFloatLayout.

    Ten en cuenta que la declaración de importación para MDFloatLayout es correcta en tu fragmento de código original.

Comments are closed.