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.

No se puede cambiar el texto de la etiqueta de kivy/kivymd.

Cuando intento cambiar el texto de una etiqueta en kivy/kivymd me da el siguiente error:

AttributeError: el objeto 'TheApp' no tiene el atributo 'ids'

Aquí hay parte del main.py para un ejemplo mínimo reproducible:

class TheApp(MDApp):
    btstate = 0

def voice_session_connec(self):

    if self.btstate == 0:
        self.ids.Main_button.text = "Detener"
        btstate = 1
        th = threading.Thread(target=voice_session)
        self.th.start()
    else:
        self.ids.Main_button.text = "Iniciar"
        btstate = 0
        self.th.join()

Cadena de KV:

MDFloatLayout:

MDRoundFlatButton:
    id: Main_button
    text: "Iniciar"
    text_color: 0, 1, 0, 1
    pos_hint: {"center_x": .5, "center_y": .5}
    on_release: app.voice_session_connec()

Espero que puedas resolver esto, pero no soy muy bueno con kivy.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema parece estar en el uso del atributo ‘ids’ para acceder al objeto ‘Main_button’. Debes declarar primero ‘Main_button’ como un id en tu cadena KV dentro de corchetes angulares de esta manera:

    MDFloatLayout:
        MDRoundFlatButton:
            id: Main_button
            text: "Start"
            text_color: 0, 1, 0, 1
            pos_hint: {"center_x": .5, "center_y": .5}
            on_release: app.voice_session_connec()
    

    Luego puedes acceder a él utilizando ‘self.root.ids.Main_button’ en tu código Python de esta manera:

    class TheApp(MDApp):
        btstate = 0
    
        def voice_session_connec(self):
    
            if self.btstate == 0:
                self.root.ids.Main_button.text = "Stop"
                self.btstate = 1
                th = threading.Thread(target=voice_session)
                self.th.start()
            else:
                self.root.ids.Main_button.text = "Start"
                self.btstate = 0
                self.th.join()
    

    Esto debería solucionar el error y permitirte cambiar el texto de la etiqueta.

Comments are closed.