¿Cómo hacer una actualización de la etiqueta Tkinter?

Tengo una interfaz gráfica de usuario tkinter simple con una etiqueta que muestra un número y un botón. Lo tengo configurado en la variable x, y cuando se presiona el botón, el valor de x aumenta en uno. Sin embargo, cuando presiono el botón, la etiqueta no se actualiza. ¿Cómo hago esto?

from tkinter import * x = 1 def add(): global x x += 1 win = Tk() label = Label(win, text=x) label.pack() button = Button(win, text="Increment", command=add) button.pack() win.mainloop() 

Configurar el text de una etiqueta es un efecto de un disparo. Actualizar el int más tarde no actualizará la etiqueta.

Para resolver esto, puede actualizar explícitamente la etiqueta usted mismo:

 def add(): global x x += 1 label.configure(text=x) 

… O puede usar una variable tkinter como IntVar (o más generalmente, StringVar , si su texto no es solo un número), que actualiza la etiqueta cuando actualiza la var. No olvides configurar la textvariable de text lugar del text si haces esto.

 from tkinter import * win = Tk() x = IntVar() x.set(1) def add(): x.set(x.get() + 1) label = Label(win, textvariable=x) label.pack() button = Button(win, text="Increment", command=add) button.pack() win.mainloop() 

Tenga cuidado de crear una instancia Tk() antes de crear IntVar , de lo contrario, tkinter lanzará una excepción.

Tienes que hacerlo manualmente asociando un command con el clic del botón. Supongamos que desea que el texto de la Label actualice al hacer clic en el button :

 button = Button(win, text="One", command=add) # add() is called when button is clicked 

Ahora, define el comando / función de add para cambiar el texto en la etiqueta:

 def add(): global x x += 1 label.config(text=x) # calling the method config() to change the text 

Lo que hice es usar un IntVar () y un método para sumr o restar:

 *outside the class body* def plus1(self,var,l): var.set(int(var.get())+1) l.textvariable = var return var.get() *Inside the body of your class* self.your_text = IntVar() self.your_text.set(0) self.l = Label(master, textvariable = (self.your_text)) self.plus_n = Button(root,text = '+',command=lambda : self.your_text.set(self.plus1(self.your_text,self.l) ) 

Así es como lo hice y me funciona, probablemente haya formas más elegantes de resolver el problema.