Desarrollo GUI en Python con Tkinter: Guía Completa
Python ofrece varias opciones para desarrollar interfaces gráficas de usuario (GUI). Las más importantes:
- Tkinter: Interfaz Python al toolkit Tk GUI incluido con Python. Cubierto en este capítulo.
- wxPython: Interfaz open-source para wxWindows (https://wxpython.org).
- JPython: Puerto de Python para Java, acceso a librerías Java (https://www.jython.org).
Programación con Tkinter
Tkinter es la librería GUI estándar de Python. Python combinado con Tkinter proporciona forma rápida y fácil de crear aplicaciones GUI. Tkinter ofrece interfaz orientada a objetos potente para el toolkit Tk GUI.
Crear aplicación GUI con Tkinter es sencillo. Pasos:
- Importar módulo Tkinter (Python 2) o tkinter (Python 3).
- Crear ventana principal de la aplicación.
- Añadir uno o más widgets.
- Entrar en el bucle principal de eventos (mainloop()) para responder a eventos del usuario.
Ejemplo Básico
#!/usr/bin/python import tkinter as tk top = tk.Tk() # Código para añadir widgets irá aquí... top.mainloop()
Esto crea una ventana básica vacía.
Widgets de Tkinter
Tkinter proporciona varios controles (botones, etiquetas, cuadros de texto) llamados widgets. Actualmente hay 19 tipos de widgets principales:
| Widget | Descripción |
|---|---|
| Button | Muestra botones en la aplicación. |
| Canvas | Dibuja formas: líneas, óvalos, polígonos, rectángulos. |
| Checkbutton | Muestra opciones como casillas de verificación (múltiples seleccionables). |
| Entry | Campo de texto de una línea para entrada de valores. |
| Frame | Contenedor para organizar otros widgets. |
| Label | Leyenda de una línea para otros widgets; puede contener imágenes. |
| Listbox | Lista de opciones para el usuario. |
| Menubutton | Muestra menús en la aplicación. |
| Menu | Proporciona comandos al usuario (dentro de Menubutton). |
| Message | Campo de texto multilínea. |
| Radiobutton | Opciones como botones de radio (solo uno seleccionable). |
| Scale | Widget deslizador (slider). |
| Scrollbar | Añade capacidad de desplazamiento a widgets como listboxes. |
| Text | Muestra texto en múltiples líneas. |
| Toplevel | Contenedor de ventana separada. |
| Spinbox | Variante de Entry para seleccionar de valores fijos. |
| PanedWindow | Contenedor con paneles horizontales/verticales. |
| LabelFrame | Contenedor simple para layouts complejos. |
| tkMessageBox | Módulo para mostrar cuadros de diálogo de mensaje. |
Atributos Estándar
Atributos comunes para tamaños, colores, fuentes, anclas, estilos de relieve, bitmaps y cursores.
- Dimensiones: Unidades en píxeles, puntos, centímetros, pulgadas.
- Colores: Nombres de color ("red", "blue") o hexadecimales ("#FF0000").
- Fuentes: Tuplas (familia, tamaño, estilo) o objetos Font.
- Anclas: Posicionamiento: N, NE, E, SE, S, SW, W, NW, CENTER.
- Estilos de relieve: FLAT, RAISED, SUNKEN, GROOVE, RIDGE.
- Bitmaps: Patrones predefinidos (error, hourglass, info, question, warning, etc.).
- Cursores: Formas del ratón (arrow, cross, hand2, watch, etc.).
Gestión de Geometría
Todos los widgets Tkinter tienen métodos de gestión de geometría para organizar widgets en el área del widget padre. Tkinter expone tres gestores:
pack(): Organiza widgets en bloques antes de colocarlos en el widget padre. Apila widgets vertical u horizontalmente.
grid(): Organiza widgets en estructura tipo tabla (filas y columnas) en el widget padre.
place(): Coloca widgets en posición específica (coordenadas absolutas o relativas) en el widget padre.
Cuándo Usar Cada Uno
- pack(): Layouts simples, apilamiento lineal, cuando no necesitas control preciso de filas/columnas.
- grid(): Formularios, tablas, layouts complejos con alineación en filas y columnas.
- place(): Posicionamiento absoluto preciso, overlays, casos especiales.
Nota importante: No mezcles pack y grid en el mismo contenedor padre; causa errores de renderizado.
Ejemplo Práctico con Widgets Comunes
#!/usr/bin/python
import tkinter as tk
from tkinter import messagebox
def on_click():
messagebox.showinfo("Saludo", "¡Hola, " + entry.get() + "!")
root = tk.Tk()
root.title("Ejemplo Tkinter")
root.geometry("300x150")
tk.Label(root, text="Ingresa tu nombre:").pack(pady=5)
entry = tk.Entry(root)
entry.pack(pady=5)
tk.Button(root, text="Saludar", command=on_click).pack(pady=10)
root.mainloop()
Este ejemplo crea una ventana con etiqueta, campo de entrada y botón que muestra un diálogo al hacer clic.
python
- Dominando tipos de datos en Python: Guía práctica
- Dominando operadores en Python: Guía completa
- Dominando la sentencia pass en Python: Guía práctica
- Dominando argumentos de funciones en Python: Posicionales, por palabra clave y por defecto
- Dominando Diccionarios en Python: Creación, Manipulación y Técnicas Avanzadas
- Dominando la Programación Orientada a Objetos en Python: Clases, Herencia, Encapsulación y Polimorfismo
- Dominando Iteradores en Python: Cómo Funcionan y Cómo Crear los Tuyos
- Explicación de Closures en Python: Cómo las Funciones Anidadas Capturan Variables
- Dominando datetime en Python: Guía Práctica de Fechas, Horas y Zonas Horarias
- Dominar time.sleep() en Python: Mejores Prácticas, Multihilo y Ejemplos Reales
- Programación de Redes en Python: Sockets y Protocolos Avanzados