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.