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 actualizar el texto de la etiqueta en Python Tkinter sin llamar a pack() de nuevo.

from tkinter import *
from tkinter.ttk import *

root = Tk()
first_run = True

def update(txt):
global first_run
text1 = Label(root, text=”)
if first_run:
text1.pack()
text1[‘text’] = txt
first_run = False

update(‘1’)
update(‘2’)
update(‘3’)
root.mainloop()

Al ejecutar esto, el texto permanece en ‘1’, y las siguientes 2 llamadas de función son ignoradas. Descubro que solo si uso pack() de nuevo, entonces se actualizará, pero crea una etiqueta duplicada y no quiero eso.

Por supuesto, sé que se supone que debo usar un StringVar, pero he estado usando este método para todos los demás widgets (botones, marcos de etiquetas, etc.) y todos funcionan. No sé por qué este caso en particular no funciona.

Ejecutando en Python 3.9.9 en Windows 11

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para solucionar este problema, puede usar un StringVar para actualizar el texto del widget Label. El StringVar es un tipo de variable especial que se utiliza para almacenar y actualizar el texto de un widget. Para usarlo, debe crear un objeto StringVar y asignarlo al atributo textvariable del widget Label. Luego, puede utilizar el método set del objeto StringVar para actualizar el texto del widget Label.

    Por ejemplo:

    from tkinter import *
    from tkinter.ttk import *
    
    root = Tk()
    
    text_var = StringVar()
    text1 = Label(root, textvariable=text_var)
    text1.pack()
    
    text_var.set('1')
    text_var.set('2')
    text_var.set('3')
    
    root.mainloop()
    

Comments are closed.