Lección 5 · 5 de 20
Campos de contraseña · tkinter
Oculte lo que se escribe en un Entry de tkinter con show="•" y añada un botón para mostrar u ocultar la contraseña.

El campo User es un ttk.Entry normal. Esta vez no lleva variable: se rellena con `user.insert(0, "marlon")`, que inserta el texto en la posición 0, al principio.
El de la contraseña lleva `show="•"`: cada carácter se dibuja como un punto. El texto de verdad sigue dentro; solo cambia cómo se ve. Vale cualquier carácter, por ejemplo show="*".
toggle() consulta la opción actual con `cget("show")`. Si está oculta, pone show="" (se ve el texto) y el botón pasa a decir «Hide»; si no, vuelve a "•" y a «Show». Como toggle cambia el botón, este se guarda en la variable button.
password.get() devuelve el texto real, no los puntos: la etiqueta de abajo muestra su longitud, 9 characters. trace_add la actualiza en cuanto se escribe, y la llamada a show_length() la rellena al arrancar.
En DMarlon Studio hay dos caminos: el Campo de texto tiene la propiedad *Ocultar con*, que es este mismo show, y la paleta trae además la Contraseña, un campo ya preparado con un botón para ver la contraseña que se activa en el inspector.
Código · main.py
import tkinter as tkfrom tkinter import ttkroot = tk.Tk()root.title("Sign in")root.geometry("420x290")password = tk.StringVar(value="secret123")ttk.Label(root, text="User").pack(anchor="w", padx=60, pady=(24, 2))user = ttk.Entry(root, width=30)user.insert(0, "marlon")user.pack(anchor="w", padx=60)# show="•" draws every character as a dot; the text is still there.ttk.Label(root, text="Password").pack(anchor="w", padx=60, pady=(12, 2))secret = ttk.Entry(root, textvariable=password, show="•", width=30)secret.pack(anchor="w", padx=60)def toggle(): hidden = secret.cget("show") != "" secret.config(show="" if hidden else "•") button.config(text="Hide" if hidden else "Show")button = ttk.Button(root, text="Show", command=toggle)button.pack(anchor="w", padx=56, pady=10)info = ttk.Label(root, foreground="#475569")info.pack(anchor="w", padx=60)def show_length(*args): # get() returns the real text, not the dots info.config(text=f"Length: {len(password.get())} characters")password.trace_add("write", show_length)show_length()root.mainloop()Para recordar
show="•"oculta lo que se escribe;show=""lo vuelve a mostrar.get()devuelve el texto real, no los puntos.insert(0, texto)rellena unEntrysin variable.cget("opción")lee el valor actual de una opción.
Ejercicio
Use show="*" y haga que la etiqueta diga «Too short» en rojo cuando la contraseña tenga menos de 8 caracteres.