Lección 4 · 4 de 20
Campos de texto con StringVar · tkinter
El campo de texto de tkinter (Entry) unido a una StringVar: valor inicial, lectura con get() y una etiqueta que cambia mientras se escribe.

Una `StringVar` es una variable de tkinter que guarda texto. tk.StringVar(value="Ada Lovelace") la crea ya con un valor, así que el campo aparece relleno.
ttk.Entry(root, textvariable=name, width=36) es el campo de texto: una sola línea que se puede editar. Con `textvariable`, campo y variable quedan unidos: lo que se escribe va a la variable y lo que se pone con name.set(...) aparece en el campo. width es el ancho en caracteres y entry.focus() deja el cursor en él.
`name.trace_add("write", update)` pide que se llame a update cada vez que cambie la variable, es decir, con cada tecla. update lee el texto con `name.get()` y lo pone en el saludo; se llama una vez al principio para que la etiqueta no empiece vacía.
El botón Clear hace name.set(""): vacía el campo y, gracias a la traza, el saludo pasa a «Hello, nobody!». El lambda sirve para pasar a command una función de una sola línea.
En DMarlon Studio es el Campo de texto de la paleta. Su *Texto inicial* se pone en el inspector, y el estudio crea para cada campo una StringVar llamada self.<Nombre>_var, con la que se lee y se cambia su valor desde el código.
Código · main.py
import tkinter as tkfrom tkinter import ttkroot = tk.Tk()root.title("Entry and StringVar")root.geometry("440x250")# A StringVar holds the text; the entry shows it and edits it.name = tk.StringVar(value="Ada Lovelace")ttk.Label(root, text="Your name:").pack(anchor="w", padx=32, pady=(28, 4))entry = ttk.Entry(root, textvariable=name, width=36)entry.pack(anchor="w", padx=32)entry.focus()# This label follows the variable: it changes as you type.greeting = ttk.Label(root, font=("Helvetica", 18))greeting.pack(pady=22)def update(*args): greeting.config(text=f"Hello, {name.get() or 'nobody'}!")name.trace_add("write", update) # call update on every changeupdate()ttk.Button(root, text="Clear", command=lambda: name.set("")).pack()root.mainloop()Para recordar
textvariableune el campo con unaStringVar.get()lee el texto yset()lo cambia.trace_add("write", función)avisa de cada cambio.widthen unEntryse mide en caracteres.
Ejercicio
Añada un segundo campo para el apellido y haga que el saludo muestre el nombre y el apellido juntos.