Tkinter en Python
¿Qué es Tkinter? {#qué-es-tkinter}
Tkinter es la biblioteca nativa de Python para interfaces gráficas (GUI).
Permite crear ventanas, botones, menús, formularios, cuadros de texto, y mucho más. Viene preinstalada con Python (no requiere pip install).
Primer ejemplo: ventana básica {#primer-ejemplo-ventana-básica}
import tkinter as tk
ventana = tk.Tk() # Crea la ventana principal
ventana.title("Mi primera GUI") # Título
ventana.geometry("400x300") # Tamaño (ancho x alto)
ventana.mainloop() # Inicia el bucle principal
🔹 Tk() → crea la aplicación. 🔹 mainloop() → mantiene la ventana abierta escuchando eventos (clics, teclas, etc.).
Widgets principales {#widgets-principales}
Los widgets son los componentes visuales de Tkinter.
Ejemplo con varios widgets {#ejemplo-con-varios-widgets}
import tkinter as tk
def saludar():
etiqueta.config(text=f"Hola, {entrada.get()}!")
ventana = tk.Tk()
ventana.title("Ejemplo Widgets")
etiqueta = tk.Label(ventana, text="Escribe tu nombre:")
etiqueta.pack()
entrada = tk.Entry(ventana)
entrada.pack()
boton = tk.Button(ventana, text="Saludar", command=saludar)
boton.pack()
ventana.mainloop()
Gestores de diseño {#gestores-de-diseño}
Tkinter tiene tres formas principales de organizar widgets:
Ejemplo {#ejemplo}
etiqueta1.grid(row=0, column=0)
entrada1.grid(row=0, column=1)
boton.grid(row=1, column=0, columnspan=2)
Eventos y comandos {#eventos-y-comandos}
Puedes ejecutar funciones al hacer clic o escribir algo.
def al_hacer_click():
print("¡Botón presionado!")
boton = tk.Button(ventana, text="Haz clic", command=al_hacer_click)
También puedes manejar eventos con .bind():
def tecla_presionada(evento):
print("Tecla:", evento.char)
ventana.bind("", tecla_presionada)
Frames y organización {#frames-y-organización}
Los Frames permiten dividir la interfaz en secciones.
frame_superior = tk.Frame(ventana)
frame_superior.pack()
tk.Label(frame_superior, text="Arriba").pack()
tk.Label(ventana, text="Abajo").pack()
Widgets más avanzados {#widgets-más-avanzados}
Checkbutton {#checkbutton}
var = tk.BooleanVar()
tk.Checkbutton(ventana, text="Acepto términos", variable=var).pack()
Radiobutton {#radiobutton}
opcion = tk.StringVar(value="A")
tk.Radiobutton(ventana, text="Opción A", variable=opcion, value="A").pack()
tk.Radiobutton(ventana, text="Opción B", variable=opcion, value="B").pack()
Listbox {#listbox}
lista = tk.Listbox(ventana)
for i in ["Python", "C++", "Java"]:
lista.insert(tk.END, i)
lista.pack()
Colores y fuentes {#colores-y-fuentes}
tk.Label(ventana, text="Texto colorido", fg="white", bg="blue", font=("Arial", 14, "bold")).pack()
Imágenes {#imágenes}
Tkinter soporta imágenes con PhotoImage (formato .png, .gif).
img = tk.PhotoImage(file="imagen.png")
tk.Label(ventana, image=img).pack()
ventana.mainloop()
Menús {#menús}
menu = tk.Menu(ventana)
ventana.config(menu=menu)
submenu = tk.Menu(menu, tearoff=0)
menu.add_cascade(label="Archivo", menu=submenu)
submenu.add_command(label="Nuevo")
submenu.add_command(label="Salir", command=ventana.quit)
Ventanas emergentes {#ventanas-emergentes}
from tkinter import messagebox
messagebox.showinfo("Título", "Hola desde una ventana emergente")
Ejemplo completo {#ejemplo-completo}
import tkinter as tk
from tkinter import messagebox
def saludar():
nombre = entrada.get()
if nombre:
messagebox.showinfo("Saludo", f"Hola, {nombre}!")
else:
messagebox.showwarning("Advertencia", "Debes ingresar un nombre")
ventana = tk.Tk()
ventana.title("App Completa")
ventana.geometry("300x200")
tk.Label(ventana, text="Tu nombre:").pack(pady=5)
entrada = tk.Entry(ventana)
entrada.pack(pady=5)
tk.Button(ventana, text="Saludar", command=saludar).pack(pady=10)
ventana.mainloop()