Python 3 – Crear una Interfaz Gráfica, GUI

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.

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()
Dos capturas de la misma ventana de tkinter: antes de pulsar, con el texto «Escribe tu nombre y pulsa el botón», y después, con «¡Hola, Ana!»
La ventana antes y después de escribir un nombre y pulsar el botón. Son capturas de una ejecución real con Python 3.14.

Cómo funciona

PiezaQué 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=saludarla 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.

La versión anterior de esta página usaba los controles de 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.

No lo instales con 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.