Tkinter es la biblioteca estándar de Python para crear interfaces gráficas de usuario (GUI). Viene incluida en la biblioteca estándar, es multiplataforma y no requiere instalaciones adicionales.
Cuando comienzas a aprender Python, es natural que quieras crear aplicaciones de escritorio o interfaces gráficas de usuario (GUI). Tras investigar un poco, encontrarás varias bibliotecas y frameworks para Python, como PyQt, PySide, Kivy y otros.
La mayoría de estos frameworks, sin embargo, requieren instalaciones adicionales y son algo complejos de entender. Buscas algo que funcione directamente, sin complicaciones. No piensas en convertirte en desarrollador GUI. Solo quieres algo simple, fácil de aprender y práctico. Algo que puedas usar en tus proyectos personales de principiante.
Continuaste explorando el ecosistema de Python y descubriste Tkinter, allí mismo en la biblioteca estándar del lenguaje. ¡Fue una grata sorpresa! Por fin podías empezar a crear aplicaciones GUI sin instalar nada extra. Era exactamente lo que buscabas para iniciarte en el desarrollo GUI con Python.
En este tutorial, aprenderás qué es Tkinter y por qué es la biblioteca GUI estándar en Python, cómo ejecutar su aplicación de demostración integrada y cómo crear tu primera aplicación GUI. También explorarás las características principales de Tkinter, sus limitaciones más importantes y cómo sortearlas. Finalmente, conocerás cuándo tiene sentido elegir Tkinter frente a otros frameworks GUI.
Puedes encontrar el código Python de este artículo en el repositorio de ejemplos de Python Scouts. ¡Te agradeceríamos mucho si nos dejas una estrella (⭐) en el repositorio!
Tkinter: la biblioteca GUI estándar para Python
Tkinter es una biblioteca GUI que permite crear aplicaciones de escritorio en Python. Es relativamente sencilla de usar y proporciona un conjunto decente de widgets para construir interfaces de usuario. Puedes decir que Tkinter es la biblioteca GUI estándar para Python porque forma parte de la biblioteca estándar del lenguaje. Por tanto, para usar Tkinter no necesitas instalar un paquete externo. Solo tienes que importarlo en tu espacio de nombres y listo:
import tkinter as tk
Esta instrucción import te da acceso al módulo tkinter y a todos sus componentes. Es común asignarle el alias tk para facilitar su referencia en el código.
Las aplicaciones Tkinter son multiplataforma, lo que significa que se ejecutan en Windows, macOS y Linux con cambios mínimos en el código.
Por debajo, Tkinter es una capa de Python sobre Tcl/Tk, que es un popular toolkit GUI. Tcl (Tool Command Language) es un lenguaje de scripting y Tk es su toolkit GUI asociado.
En desarrollo GUI, un widget es un elemento gráfico que sirve como bloque de construcción para la interfaz de usuario. Los widgets permiten a los usuarios interactuar con la aplicación, proporcionando entrada, ejecutando acciones o recibiendo salida.
Como Tkinter está incluido en la biblioteca estándar, permite la distribución rápida de herramientas ligeras en entornos diversos sin requerir una gestión compleja de dependencias. Sin embargo, la disponibilidad de la biblioteca está sujeta a matices específicos de cada plataforma:
- Windows y macOS: Los instaladores oficiales de Python.org suelen incluir versiones precompiladas de Tcl/Tk, garantizando funcionalidad inmediata.
- Linux: En Debian y Ubuntu, Tkinter a menudo se elimina del paquete base de Python para minimizar la huella. Para acceder a la biblioteca, debes instalar manualmente el paquete
python3-tk. Compilar Python desde el código fuente requiere que los encabezados de Tcl/Tk estén instalados en tu sistema. - macOS: Surgen algunos desafíos al instalar Python mediante Homebrew o compilarlo desde el código fuente. Homebrew gestiona esto vinculando automáticamente sus paquetes principales de Python a su fórmula independiente
tcl-tk, pero las compilaciones personalizadas requieren banderas de entorno explícitas durante la compilación.
Si estás acostumbrado a trabajar con uv como gestor de paquetes y proyectos de Python, puedes tener múltiples versiones de Python. Todas incluyen una versión precompilada de Tcl/Tk.
Como ya sabes, la biblioteca Tkinter está disponible en la biblioteca estándar de Python. Así que no tienes que instalar paquetes adicionales. Para disfrutar de una demostración rápida de Tkinter, abre una terminal o línea de comandos y ejecuta el siguiente comando:
$ python -m tkinter
Este comando lanza una pequeña aplicación Tkinter que se ve más o menos así:

Aplicación de demostración de Tkinter lanzada con python -m tkinter.
Al hacer clic en el botón Click me!, su etiqueta cambiará a [Click me!] entre corchetes. Si vuelves a hacer clic en el botón, obtendrás [[Click me!]] con corchetes dobles y así sucesivamente. Finalmente, al hacer clic en el botón QUIT se cerrará la ventana y terminará la aplicación.
Una primera aplicación con Tkinter
Tkinter te permite crear aplicaciones usando ventanas, diálogos, botones, campos de entrada de texto y muchos otros elementos GUI.
Aquí tienes cómo escribir una rápida aplicación "¡Hola, Mundo!" con Tkinter:
import tkinter as tk
root = tk.Tk()
root.title("¡Hola, Tkinter!")
label = tk.Label(root, text="¡Hola, Mundo!")
label.pack()
root.mainloop()
Tras importar el paquete tkinter, creas una instancia de Tk. Esta clase representa el widget raíz de una aplicación Tkinter, por eso solemos llamarla root. Luego, estableces un título para tu aplicación. Este título se mostrará en la barra de título de la ventana principal al ejecutar la app.
La clase Label permite añadir etiquetas de texto a la interfaz de usuario de la app. En este ejemplo, pasas el widget raíz como padre de la etiqueta y añades el clásico texto "¡Hola, Mundo!". Una vez lista la instancia, usas el método .pack() para empaquetar el widget y mostrarlo en la ventana de la aplicación.
La última línea lanza la aplicación e inicia su bucle principal o event loop. En la siguiente sección, hablaremos de esto y otras características fundamentales que son la base de la mayoría de aplicaciones Tkinter.
Ejecuta la aplicación desde tu línea de comandos. Obtendrás una ventana como la siguiente:

Ventana de la app "¡Hola, Mundo!" ejecutando el bucle principal de Tkinter.
Para simplificar, mantuvimos el código de la app corto y directo. Al ejecutarla, la ventana en tu pantalla puede ser más pequeña. Arrastra la esquina inferior derecha para redimensionarla.
Características principales de Tkinter
En primer lugar, debes saber que Tkinter es solo una biblioteca GUI, no un framework GUI completo. ¿Qué significa esto? Significa que Tkinter proporciona un kit de widgets y otras herramientas básicas para crear aplicaciones GUI.
Sin embargo, Tkinter no ofrece herramientas para interactuar con bases de datos, manejar comunicaciones de red, trabajar con multimedia ni ninguna otra funcionalidad que encontrarías en un framework GUI. Cuando necesitas ese tipo de funcionalidad empaquetada en un solo paquete, recurres a un framework completo como PyQt, PySide o Kivy.
Esto es lo que encontrarás en Tkinter:
- Widgets: Elementos gráficos que incluyen botones, etiquetas, cuadros de texto, casillas de verificación, botones de radio, menús y más. Vienen en dos variantes: widgets clásicos y widgets temáticos del módulo
ttk. - Gestor de geometría: Los gestores de geometría como
.pack(),.grid()y.place()controlan la disposición de los widgets dentro de una ventana. - Manejo de eventos: Los eventos representan interacciones del usuario con la interfaz de la app, como clics en botones, pulsaciones de teclas, movimientos del ratón, etc. Puedes enlazar funciones (callbacks) a eventos para realizar acciones reales.
- Canvas: El widget
Canvaspermite dibujar formas, crear widgets personalizados y realizar operaciones gráficas complejas. - Diálogos: Diálogos estándar son ventanas emergentes para selección de archivos y colores, cuadros de mensaje, configuración de la app y más.
- Bucle de eventos: Un bucle de eventos que inicia la aplicación, espera eventos del usuario y los gestiona para su procesamiento.
Con estos componentes, puedes crear interfaces gráficas de usuario interesantes en Python. Ten en cuenta que, como Tkinter es solo una biblioteca GUI, necesitarás usar paquetes de la biblioteca estándar o de terceros para trabajar con bases de datos, servicios de red, multimedia, etc.
Limitaciones y consideraciones
Como biblioteca GUI relativamente antigua y simple, Tkinter tiene varias limitaciones que debes conocer. Uno de los problemas más conocidos concierte a cómo se ven las aplicaciones.
Estilo y apariencia
El conjunto de widgets clásicos parece componentes de UI de 1995 en algunas plataformas. Con los años, el aspecto de los widgets ha evolucionado hacia diseños nativos de cada plataforma. La introducción de widgets temáticos con el módulo ttk marcó un cambio técnico en cómo se renderizan los widgets, permitiendo que las aplicaciones imiten el aspecto nativo del sistema operativo anfitrión.
Así se ven algunos de los widgets más comunes de ambos conjuntos, clásico y temático:

Conjuntos de widgets clásicos y temáticos lado a lado en Windows.
Los widgets suelen ofrecer varias opciones de personalización para ajustar su estilo. Sin embargo, en algún momento esas opciones no son suficientes para construir una GUI moderna.
Cuando necesitas un aspecto más moderno sin abandonar la API de Tkinter, recurres a CustomTkinter. Esta biblioteca evita por completo la estética de 1995 proporcionando widgets modernos y totalmente personalizables. Te permite mantener la simplicidad de la API de Tkinter mientras ofrecen una experiencia visual contemporánea.
Widgets compuestos
Aunque Tkinter proporciona varios widgets principales, como Label, Button, Entry, Checkbutton y otros, carece de widgets compuestos dedicados, como barras de estado y barras de herramientas.
Si quieres widgets compuestos en Tkinter, tienes que construirlos manualmente. El enfoque típico consiste en subclasificar un widget contenedor, como Frame o LabelFrame, para encapsular un grupo de controles hijos estándar en una unidad reutilizable.
Esto resulta en más código repetitivo inicial y requiere un diseño arquitectónico riguroso si construyes interfaces de grado profesional.
Complejidad con hilos y asincronía
Tkinter usa un bucle de eventos de un solo hilo, que inicializamos con .mainloop(), como ya aprendiste. Este bucle es responsable tanto del redibujado de pantalla como del procesamiento de la entrada del usuario. Si una tarea de larga duración bloquea este bucle, la interfaz de la app se congela inmediatamente, resultando en una mala experiencia de usuario.
Para manejar este tipo de problema, podrías usar algunas de estas técnicas:
- Eventos temporizados con
root.after(): Ideal cuando puedes dividir el trabajo en trozos. Cada paso hace un poco de trabajo y luego programa el siguiente. - E/S asíncrona: Ideal para llamadas de red, archivos y bases de datos que no pueden garantizar rapidez. El bucle
asynciode Python y el bucle de Tkinter no pueden compartir un hilo. Mantén Tkinter en el hilo principal y ejecutaasyncioen otro. - Hilos y procesos: Ideal cuando no puedes dividir el trabajo en trozos. Ejecuta el trabajo lento en un worker (hilo o subproceso), mantén todas las actualizaciones de widgets en el hilo principal y haz que el worker envíe resultados en lugar de tocar la GUI directamente.
Estos enfoques son necesarios porque Tkinter no proporciona un framework integrado para manejo de hilos. Recuerda, es una biblioteca GUI.
Casos de uso prácticos para Tkinter
Tkinter sigue siendo una opción dominante en nichos específicos donde la huella de despliegue es un factor decisivo. Mientras que otros frameworks GUI, como PyQt o PySide, pueden requerir binarios que superan los 100 MB, el tamaño de una aplicación Tkinter se limita esencialmente al script en sí.
También será tu biblioteca de referencia para utilidades personales, como la app Pomodoro que armé para controlar mis sesiones de trabajo:

Mi app Pomodoro, una utilidad personal construida con Tkinter.
La tabla siguiente resume rápidamente cuándo preferir Tkinter sobre otras bibliotecas y frameworks GUI:
| Caso de uso | Justificación |
|---|---|
| Herramientas de utilidad para automatizar tareas y flujos personales | Crear una app GUI rápida para gestionar tareas personales en tu entorno local. |
| GUIs ligeras para envolver herramientas de línea de comandos (CLI) | Añade una GUI a herramientas CLI existentes con aumento casi nulo en el tamaño del paquete. |
| Sistemas portátiles de entrada/diálogos | Aprovecha diálogos nativos del SO con código mínimo para utilidad multiplataforma. |
| Prototipado rápido de apps GUI | Construye layouts funcionales en minutos con los gestores de geometría .pack() y .grid(). |
| Visualizaciones científicas | Interactúa nativamente con librerías de gráficos y procesamiento de imágenes, como Matplotlib y Pillow. |
En estos escenarios, la menor sobrecarga y los requisitos de cero instalación de Tkinter superan los conjuntos de características más amplios de frameworks de escala empresarial como PyQt, PySide y Kivy.
Conclusión
Tkinter ha logrado la transición de una biblioteca heredada de aspecto extraño a un contendiente moderno para el desarrollo de escritorio. Ha dejado atrás su reputación de los 90 manteniendo la simplicidad accesible que define la biblioteca estándar de Python.
Tkinter sirve como puerta de entrada para desarrolladores que entran en el mundo de las apps de escritorio. Proporciona el entorno adecuado para aprender los principios fundamentales de la arquitectura orientada a eventos, la gestión de layouts y la separación de responsabilidades.
Es una gran opción si buscas una biblioteca para construir utilidades ligeras y multiplataforma con una huella de despliegue mínima.
Puedes encontrar el código Python de este artículo en el repositorio de ejemplos de Python Scouts. ¡Te agradeceríamos mucho si nos dejas una estrella (⭐) en el repositorio!