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.

AttributeError: el objeto de tipo ‘gui’ no tiene el atributo ‘label’

Quiero cambiar el texto de una etiqueta desde fuera de la clase a través de un método setter en la clase. Sólo estoy obteniendo AttributeError: el objeto tipo ‘gui’ no tiene el atributo ‘label’. Intenté cambiar el texto a través de label[‘text’]; label.config(text = ‘X’)

from tkinter import *

class gui:
    def __init__(self):
        self.root = Tk()
        self.label = Label(self.root, text='Y')
        self.label.pack()
        self.button = Button(self.root, text='Click', command=self.__btnClick)
        self.button.pack()

        mainloop()

    def __btnClick(self):
        changeText()

    def setLabelText(self):
        self.label['text'] = 'X'

def changeText():
    gui.setLabelText(gui)

if __name__ == '__main__':
    window = gui()

No sé si esto ayuda, pero aquí está mi código completo: https://pastebin.com/bT43NgpH

¡Gracias por tu ayuda!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema aquí es que estás intentando acceder al atributo de etiqueta como si fuera un diccionario, usando self.label['text']. En Tkinter, los atributos de etiqueta se acceden como propiedades de clase, por lo que deberías usar self.label.cget('text') para obtener el valor actual del atributo de texto de la etiqueta, o self.label.config(text=nuevo_texto) para establecerlo. Aquí tienes una versión actualizada de tu código que debería funcionar:

    from tkinter import *
    
    class gui:
        def __init__(self):
            self.root = Tk()
            self.label = Label(self.root, text='Y')
            self.label.pack()
            self.button = Button(self.root, text='Click', command=self.__btnClick)
            self.button.pack()
    
            mainloop()
    
        def __btnClick(self):
            self.setLabelText('X')
    
        def setLabelText(self, nuevo_texto):
            self.label.config(text=nuevo_texto)
    
    if __name__ == '__main__':
        ventana = gui()
    

Comments are closed.