Python trae una biblioteca para hacer ventanas: tkinter. No es la más vistosa, pero no hay que instalar nada en Windows ni en macOS, y para una herramienta pequeña es justo lo que hace falta.
También te puede interesar
Una ventana que saluda
import tkinter as tk
from tkinter import ttk
ventana = tk.Tk()
ventana.title("Hola, tkinter")
ventana.geometry("360x170")
marco = ttk.Frame(ventana, padding=20)
marco.pack(fill="both", expand=True)
saludo = ttk.Label(marco, text="Escribe tu nombre y pulsa el botón")
saludo.pack(pady=(0, 8))
nombre = tk.StringVar()
entrada = ttk.Entry(marco, textvariable=nombre, width=30)
entrada.pack()
entrada.focus()
def saludar(evento=None):
texto = nombre.get().strip() or "mundo"
saludo.config(text=f"¡Hola, {texto}!")
ttk.Button(marco, text="Saludar", command=saludar).pack(pady=10)
ventana.bind("<Return>", saludar)
ventana.mainloop()
Cómo funciona
| Pieza | Qué hace |
|---|---|
tk.Tk() | crea la ventana principal; solo hay una por programa |
ttk.Frame, ttk.Label, ttk.Button… | los controles; ttk es la versión con el aspecto del sistema |
.pack() | coloca el control en la ventana, uno debajo de otro |
tk.StringVar() | una variable unida al campo de texto: lo que escribes, está ahí |
command=saludar | la función que se llama al pulsar; sin paréntesis |
ventana.mainloop() | arranca la ventana y espera a que pase algo |
Dos detalles que suelen fallar. El primero es command=saludar() con paréntesis: así la función se ejecuta una vez al crear el botón y luego el botón no hace nada. Hay que pasar la función, no llamarla. El segundo es que todo lo que va después de mainloop() no se ejecuta hasta que cierras la ventana: es un bucle que espera clics y teclas.
La función recibe evento=None para servir a la vez al botón, que la llama sin argumentos, y a la tecla Intro, que le pasa el evento.
tkinter a secas, y se ven como un programa de los noventa. Los de ttk tienen el aspecto del sistema y se usan igual: basta con importarlos de tkinter.ttk.Si en Linux no aparece tkinter
salidaImportError: libtk8.6.so: cannot open shared object file: No such file or directory
Ese fue el error en nuestro contenedor de pruebas; con el Python de una distribución suele ser ModuleNotFoundError: No module named 'tkinter'. El motivo es el mismo en los dos casos. En Windows y macOS tkinter viene con el instalador oficial, pero muchas distribuciones de Linux lo separan en un paquete aparte: en Debian y Ubuntu se instala con sudo apt install python3-tk.
pip install tk. El paquete tk de PyPI no tiene nada que ver con tkinter: es otro proyecto con el mismo nombre. tkinter no se instala con pip.Más información en inglés: Create a window or GUI in Python.
Todo el código se ejecutó con Python 3.14 en un contenedor limpio antes de publicar esta página; las salidas están copiadas de esa ejecución.