Microcurso: Creación de una Ventana en Python con Tkinter

© 2025 Creado por Profesor Bill Papas.
© 2025 Todos los derechos reservados.

Volveral Inicio

Lección 1: Introducción a Tkinter

Tkinter es la biblioteca estándar de Python para crear interfaces gráficas de usuario (GUIs). Viene incluida con Python, por lo que no necesitas instalar nada adicional.

¿Qué es una ventana en Tkinter?

La ventana principal (o "root window") es el contenedor base de cualquier aplicación GUI en Tkinter. Todas las demás widgets (botones, etiquetas, etc.) se colocan dentro de esta ventana.

Tip: Tkinter es multiplataforma, lo que significa que tu aplicación se verá similar en Windows, macOS y Linux.

Creando tu primera ventana

El código más básico para crear una ventana en Tkinter es:

import tkinter as tk

# Crear la ventana principal
ventana = tk.Tk()

# Iniciar el bucle principal de la aplicación
ventana.mainloop()

Práctica:

1. Abre tu editor de Python favorito (IDLE, VS Code, PyCharm, etc.)
2. Copia el código anterior
3. Ejecútalo y observa la ventana que aparece

Lección 2: Personalizando la Ventana

Ahora que sabemos crear una ventana básica, vamos a personalizarla con título, tamaño y otros atributos.

Configurando el título de la ventana

Puedes cambiar el título de la ventana con el método title():

ventana.title("Mi Primera Ventana")

Estableciendo el tamaño de la ventana

Hay dos formas principales de establecer el tamaño:

# Tamaño mínimo (ancho x alto)
ventana.minsize(400, 300)

# Tamaño inicial (ancho x alto)
ventana.geometry("400x300")

Ejemplo completo:

import tkinter as tk

ventana = tk.Tk()
ventana.title("Ventana Personalizada")
ventana.minsize(400, 300)
ventana.geometry("500x400")

ventana.mainloop()

Práctica:

1. Modifica el código anterior cambiando el título y el tamaño
2. Prueba qué pasa si solo usas minsize() sin geometry()
3. Intenta hacer la ventana cuadrada (mismo ancho y alto)

Lección 3: Más Opciones de Ventana

Vamos a explorar más opciones para personalizar nuestra ventana.

Cambiar el icono de la ventana

Puedes cambiar el icono que aparece en la barra de título:

# Necesitas un archivo .ico (Windows) o .png (Linux/macOS)
ventana.iconbitmap("icono.ico") # Para Windows
# O alternativamente para multiplataforma:
ventana.iconphoto(False, tk.PhotoImage(file='icono.png'))

Controlar la redimensión

Puedes controlar si la ventana puede ser redimensionada:

# Permitir redimensionar solo horizontalmente
ventana.resizable(True, False)

# No permitir redimensionar en absoluto
ventana.resizable(False, False)

Posicionar la ventana en la pantalla

Puedes especificar dónde aparece la ventana:

# Centrar la ventana en la pantalla
ancho_ventana = 500
alto_ventana = 400

ancho_pantalla = ventana.winfo_screenwidth()
alto_pantalla = ventana.winfo_screenheight()

x = (ancho_pantalla // 2) - (ancho_ventana // 2)
y = (alto_pantalla // 2) - (alto_ventana // 2)

ventana.geometry(f"{ancho_ventana}x{alto_ventana}+{x}+{y}")
Tip: El método winfo_screenwidth() y winfo_screenheight() te dan las dimensiones de la pantalla.

Lección 4: Atributos Especiales de la Ventana

Exploremos algunos atributos especiales que pueden hacer tu ventana más profesional.

Transparencia

Puedes hacer que tu ventana sea parcialmente transparente:

# Valor entre 0.0 (invisible) y 1.0 (completamente opaco)
ventana.attributes('-alpha', 0.9) # 90% opaco

Ventana siempre encima

Puedes hacer que tu ventana permanezca sobre otras:

ventana.attributes('-topmost', True)

# Para desactivarlo más tarde:
ventana.attributes('-topmost', False)

Quitar la decoración de la ventana

Puedes crear una ventana sin bordes ni barra de título:

ventana.overrideredirect(True)

# Para volver a la normalidad:
ventana.overrideredirect(False)
Precaución: Con overrideredirect(True) no tendrás botones de minimizar/maximizar/cerrar, necesitarás proporcionar tu propia forma de cerrar la ventana.

Práctica:

1. Crea una ventana semitransparente que siempre esté encima
2. Experimenta con diferentes valores de transparencia
3. Prueba overrideredirect y observa cómo cambia el comportamiento

Lección 5: Manejo de Eventos y Cierre

Aprenderemos a manejar el cierre de la ventana y otros eventos importantes.

Protocolo de cierre

Puedes controlar qué sucede cuando el usuario intenta cerrar la ventana:

def on_cerrar():
if messagebox.askokcancel("Salir", "¿Estás seguro de que quieres salir?"):
ventana.destroy()

ventana.protocol("WM_DELETE_WINDOW", on_cerrar)

Ejemplo completo con importación necesaria:

import tkinter as tk
from tkinter import messagebox

ventana = tk.Tk()
ventana.title("Manejo de Cierre")
ventana.geometry("400x300")

def on_cerrar():
if messagebox.askokcancel("Salir", "¿Estás seguro de que quieres salir?"):
ventana.destroy()

ventana.protocol("WM_DELETE_WINDOW", on_cerrar)

ventana.mainloop()

Eventos de teclado

Puedes vincular funciones a teclas específicas:

def cerrar_con_tecla(event):
ventana.destroy()

ventana.bind("<Escape>", cerrar_con_tecla)
Tip: Puedes vincular casi cualquier tecla o combinación de teclas. Algunos ejemplos: "<Control-q>", "<Alt-F4>", "<F1>".

Lección 6: Ventanas Secundarias (Toplevel)

A veces necesitas más de una ventana en tu aplicación. Veamos cómo crear ventanas secundarias.

Creando una ventana secundaria

Usa Toplevel() para crear ventanas adicionales:

def abrir_ventana_secundaria():
ventana_secundaria = tk.Toplevel(ventana)
ventana_secundaria.title("Ventana Secundaria")
ventana_secundaria.geometry("300x200")

boton = tk.Button(ventana, text="Abrir Ventana", command=abrir_ventana_secundaria)
boton.pack()

Diferencias entre Tk() y Toplevel()

Controlar el enfoque

Puedes controlar qué ventana tiene el enfoque:

# Hacer que la ventana secundaria tome el enfoque
ventana_secundaria.focus_force()

# Traer la ventana al frente
ventana_secundaria.lift()

Práctica:

1. Crea una aplicación con una ventana principal y un botón que abra 3 ventanas secundarias
2. Haz que cada ventana secundaria tenga un título diferente
3. Experimenta con focus_force() y lift()

Lección 7: Temas y Estilos

Puedes cambiar la apariencia de tu ventana usando temas predefinidos.

Usando ttk para estilos modernos

El módulo ttk (themed tkinter) ofrece widgets con mejor apariencia:

from tkinter import ttk

style = ttk.Style()

# Ver los temas disponibles
print(style.theme_names())

# Establecer un tema
style.theme_use("clam") # Otros: "alt", "default", "classic", "vista", "xpnative"

Ejemplo completo con ttk:

import tkinter as tk
from tkinter import ttk

ventana = tk.Tk()
ventana.title("Ventana con Tema")

# Configurar el tema
style = ttk.Style()
style.theme_use("clam")

# Crear un botón ttk (con mejor apariencia)
boton = ttk.Button(ventana, text="Botón Moderno")
boton.pack(pady=20)

ventana.mainloop()

Personalizando colores

Puedes cambiar los colores de fondo y otros elementos:

# Cambiar color de fondo de la ventana
ventana.configure(bg="#f0f0f0")

# Configurar colores para ttk
style.configure("TButton", foreground="blue", background="white", padding=10)
Tip: Los temas disponibles dependen del sistema operativo. "clam" y "alt" suelen estar disponibles en todas las plataformas.

Lección 8: Proyecto Final

Vamos a crear una ventana que combine todo lo aprendido en el curso.

Requisitos del proyecto:

Solución de ejemplo:

import tkinter as tk
from tkinter import ttk, messagebox

def main():
# Configurar ventana principal
ventana = tk.Tk()
ventana.title("Proyecto Final - Ventana Python")

# Centrar ventana
ancho_ventana = 600
alto_ventana = 400
ancho_pantalla = ventana.winfo_screenwidth()
alto_pantalla = ventana.winfo_screenheight()
x = (ancho_pantalla // 2) - (ancho_ventana // 2)
y = (alto_pantalla // 2) - (alto_ventana // 2)
ventana.geometry(f"{ancho_ventana}x{alto_ventana}+{x}+{y}")

# Configurar tema
style = ttk.Style()
style.theme_use("clam")

# Función para ventana secundaria
def abrir_secundaria():
secundaria = tk.Toplevel(ventana)
secundaria.title("Ventana Secundaria")
secundaria.geometry("300x200")
ttk.Label(secundaria, text="¡Esta es una ventana secundaria!").pack(pady=20)
ttk.Button(secundaria, text="Cerrar", command=secundaria.destroy).pack()

# Función para cerrar
def on_cerrar():
if messagebox.askokcancel("Salir", "¿Estás seguro de que quieres salir?"):
ventana.destroy()

# Configurar cierre
ventana.protocol("WM_DELETE_WINDOW", on_cerrar)
ventana.bind("<Escape>", lambda e: on_cerrar())

# Widgets
ttk.Label(ventana, text="¡Bienvenido al Proyecto Final!", font=("Arial", 14)).pack(pady=20)
ttk.Button(ventana, text="Abrir Ventana Secundaria", command=abrir_secundaria).pack()
ttk.Button(ventana, text="Salir", command=on_cerrar).pack(pady=10)

ventana.mainloop()

if __name__ == "__main__":
main()

Tu turno:

1. Copia el código anterior y pruébalo
2. Personalízalo cambiando colores, tamaños o añadiendo más widgets
3. Intenta añadir una funcionalidad extra, como cambiar el tema con un botón

¡Felicidades!

Has completado el microcurso sobre creación de ventanas en Python con Tkinter. Ahora tienes las bases para crear interfaces gráficas completas.