Tkinter: Configurar método para tags generadas dinámicamente.

Estoy tratando de cambiar las tags de mi aplicación con el método de configuración. Las tags se hacen dinámicamente en un bucle for. Aquí es parte del código:

# create a list of reference for labels equal to zero self.lbl_areas = [] for i in range(0, len(self.samples)): # number of labels lbl=tk.IntVar() lbl.set(0) self.lbl_areas.append(tk.Label(self.win,textvariable=lbl)) # Place labels on the application using grid for i,v in enumerate(self.lbl_areas): v.grid(row=2+i,column=1,sticky=tk.W) # Try to change the value for i in range(0, len(self.samples)): self.lbl_areas[i].configure(textvariable=lbl_val[i]) # other values 

Se muestran los valores predeterminados de cero, pero el método de configuración parece no funcionar. ¿Qué hago mal?

Hay dos formas de actualizar una etiqueta una vez creada. El primero es utilizar una variable de texto, donde actualiza la variable y la etiqueta recoge automáticamente el cambio. El segundo es donde no se usa una variable de texto y, en cambio, solo se cambia el texto de la etiqueta. Estás tratando de mezclar los dos.

En mi opinión, la mejor manera es no usar una variable de texto. Es un objeto adicional que debe seguir y que no proporciona beneficios adicionales (en este caso, de todos modos).

En tu caso yo escribiría el código así:

 for i in range(0, len(self.samples)): # number of labels self.lbl_areas.append(tk.Label(self.win,text="0")) ... for i in range(0, len(self.samples)): self.lbl_areas[i].configure(text=lbl_val[i]) 

Si desea utilizar el atributo textvariable , debe guardar una referencia a la variable para poder configurarla más adelante:

 for i in range(0, len(self.samples)): # number of labels lbl=tk.IntVar() lbl.set(0) self.lbl_areas.append(tk.Label(self.win,textvariable=lbl)) self.lbl_vars.append(lbl) ... for i in range(0, len(self.samples)): self.lbl_vars[i].set(lbl_val[i]) 

Tenga en cuenta que en ambos casos, debe llamar a una función ( configure o set ) para cambiar el valor. Puede llamarlo en el widget ( widget.configure(...) ) o en la variable ( var.set(...) ). A menos que esté aprovechando las propiedades especiales de una variable tkinter, como compartir la variable entre dos o más widgets, o usar trazas de variables, su código será menos complicado sin la textvariable .