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.

Rastrear el StringVar en Tkinter para cambiar la etiqueta.

Tengo un problema con el siguiente fragmento de código en Python (versión 3.9) que debería cambiar el texto de una etiqueta según lo ingresado en un widget de entrada:

“`
import tkinter as tk

def change_labels():
print(currency.get()) # para depurar y rastrear
print(‘1’) # para depurar y rastrear
lbl_electricity[‘text’] = “Precio de Electricidad (” + currency.get() + “/kWh)”

gui_present = tk.Tk()

currency = tk.StringVar()
currency.set(‘USD’) # establece el valor inicial de la moneda

lbl_electricity = tk.Label(gui_present, text=”Precio de Electricidad (” + currency.get() + “/kWh)”)
lbl_electricity.place(relx=0.05, rely=0.03, height=25, width=175)

muestra “Precio de Electricidad (USD/kWh)” inicialmente como se requiere

input_currency = tk.Entry(gui_present, textvariable=currency)
input_currency.insert(0, currency.get()) # establece el widget de entrada para mostrar el valor inicial “USD”
input_currency.place(relx=0.5, rely=0.03, width=40, height=20)

currency.trace(“w”, change_labels)

gui_present.mainloop()

La idea del programa es obviamente que si escribo EUR en el widget de entrada, el texto de la etiqueta cambia a

“Precio de Electricidad (EUR/kWh)”

Sin embargo, la función changelabels() nunca se ejecuta si escribo algo en el widget de entrada (ni ‘1’ ni el valor actual de la moneda se imprimen en la consola). Si, solo para fines de prueba, elimino la traza y la propiedad de texto de la etiqueta, y pongo currency como textvariable para ambos widgets, la actualización funciona. Pero no a través de la función de actualización que me gustaría combinar con el valor de currency con texto adicional.

¡Muchas gracias de antemano por cualquier ayuda!

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema que tienes es que la función change_labels() no se ejecuta cuando escribes algo en el widget de entrada. Para solucionarlo, puedes intentar usar el método trace en la variable currency para llamar a la función change_labels() cuando se cambie el valor de currency. Esto se puede hacer agregando la siguiente línea de código:

    currency.trace("w", change_labels)

    Esto debería permitir que la función change_labels() sea llamada cuando se cambie el valor de currency, y debería actualizar el texto de la etiqueta en consecuencia.

Comments are closed.