¿Cómo creo una GUI de actualización automática utilizando Tkinter?

from Tkinter import * import time #Tkinter stuff class App(object): def __init__(self): self.root = Tk() self.labeltitle = Label(root, text="", fg="black", font="Helvetica 40 underline bold") self.labeltitle.pack() self.labelstep = Label(root, text="", fg="black", font="Helvetica 30 bold") self.labelstep.pack() self.labeldesc = Label(root, text="", fg="black", font="Helvetica 30 bold") self.labeldesc.pack() self.labeltime = Label(root, text="", fg="black", font="Helvetica 70") self.labeltime.pack() self.labelweight = Label(root, text="", fg="black", font="Helvetica 25") self.labelweight.pack() self.labelspeed = Label(root, text="", fg="black", font="Helvetica 20") self.labelspeed.pack() self.labeltemp = Label(root, text="", fg="black", font="Helvetica 20") self.labeltemp.pack() self.button = Button(root, text='Close recipe', width=25, command=root.destroy) self.button.pack() def Update(self, label, change): label.config(text=str(change)) def main(): app = App() app.mainloop() if __name__ == "__main__": main() 

Estoy tratando de crear una presentación de recetas que muestre el paso, las instrucciones, el peso y otras variables en una pantalla en una GUI de Tkinter.

Sin embargo, no sé cómo actualizar la GUI para cambiar con cada nuevo paso de la receta, ya que el contenido debe actualizarse dinámicamente en función de la entrada del usuario (tomada de un servidor). ¿Cómo puedo lograr actualizar los otros elementos de la GUI según el cambio en los pasos?

Puede usar after() para ejecutar la función después (por ejemplo) 1000 milisegundos (1 segundo) para hacer algo y actualizar el texto de las tags. Esta función puede ejecutarse después de 1000 milisegundos nuevamente (y nuevamente).

Es ejemplo con hora actual.

 from Tkinter import * import datetime root = Tk() lab = Label(root) lab.pack() def clock(): time = datetime.datetime.now().strftime("Time: %H:%M:%S") lab.config(text=time) #lab['text'] = time root.after(1000, clock) # run itself again after 1000 ms # run first time clock() root.mainloop() 

BTW: podrías usar StringVar como sugirió sundar nataraj Сундар

Si quieres cambiar de etiqueta dinámicamente.

 self.dynamiclabel=StringVar() self.labeltitle = Label(root, text=self.dynamiclabel, fg="black", font="Helvetica 40 underline bold") self.dyanamiclabel.set("this label updates upon change") self.labeltitle.pack() 

siempre que obtenga un nuevo valor, simplemente use .set()

 self.dyanamiclabel.set("Hurrray! i got changed") 

Esto se aplica a todas las tags. Para saber más, lea esta documentación.

Agregué una barra de proceso en mi ventana y cambié su valor de acuerdo con randint por cada 1 segundo usando la función de actualización:

 from random import randint def update(): mpb["value"] = randint(0, 100) # take process bar for example window.after(1000, update) update() window.mainloop()