1. Ventanas de diálogo estándar
Tkinter tiene un módulo incorporado llamado messagebox
para mostrar ventanas de diálogo como mensajes informativos, advertencias, errores y solicitudes de confirmación. Estos diálogos son útiles para interactuar con el usuario y crear notificaciones.
Conexión del módulo messagebox
from tkinter import messagebox
Principales tipos de diálogos con messagebox
- Ventana informativa
Las ventanas informativas proporcionan información importante al usuario. Se usa la función
messagebox.showinfo()
.def show_info(): messagebox.showinfo("Información", "Este es un mensaje informativo")
- Advertencia
La ventana de advertencia notifica sobre un posible problema o recomienda prestar atención a una acción específica. La función
messagebox.showwarning()
crea una ventana de advertencia.def show_warning(): messagebox.showwarning("Advertencia", "Este es un mensaje de advertencia")
- Ventana de error
Una ventana de error aparece cuando ocurre un problema. La función
messagebox.showerror()
es ideal para notificar al usuario sobre un error.def show_error(): messagebox.showerror("Error", "¡Ocurrió un error!")
- Solicitud de confirmación
Las solicitudes de confirmación permiten al usuario confirmar o cancelar una acción. La función
messagebox.askyesno()
devuelveTrue
oFalse
dependiendo de la elección del usuario.def confirm_exit(): response = messagebox.askyesno("Salir", "¿Estás seguro de que quieres salir?") if response: root.quit()
2. Selección de archivos y carpetas
Tkinter también ofrece el módulo filedialog
, que permite a los usuarios seleccionar archivos y carpetas. Esto es útil en aplicaciones que trabajan con archivos, donde el usuario necesita cargar o guardar un archivo.
Conexión del módulo filedialog
from tkinter import filedialog
Funciones principales de filedialog
- Abrir archivo: La función
askopenfilename()
permite al usuario seleccionar un archivo para abrir.def open_file(): file_path = filedialog.askopenfilename( title="Abrir archivo", filetypes=[("Archivos de texto", "*.txt"), ("Todos los archivos", "*.*")]) if file_path: print("Archivo seleccionado:", file_path)
- Guardar archivo: La función
asksaveasfilename()
permite al usuario seleccionar una ruta y un nombre para guardar un archivo.def save_file(): file_path = filedialog.asksaveasfilename( title="Guardar archivo", defaultextension=".txt", filetypes=[("Archivos de texto", "*.txt"), ("Todos los archivos", "*.*")]) if file_path: print("Archivo guardado como:", file_path)
- Seleccionar carpeta: La función
askdirectory()
permite seleccionar una carpeta.def select_directory(): directory_path = filedialog.askdirectory(title="Seleccionar carpeta") if directory_path: print("Carpeta seleccionada:", directory_path)
3. Ventanas emergentes personalizadas
Además de las ventanas de diálogo estándar, Tkinter proporciona el widget Toplevel
para crear ventanas emergentes personalizadas. Estas ventanas se pueden usar para crear ventanas emergentes multifuncionales con campos de entrada, botones y otros elementos de interfaz.
Creación de una ventana emergente con Toplevel
import tkinter as tk
# Función para abrir una ventana emergente
def open_popup():
popup = tk.Toplevel(root)
popup.title("Ventana emergente")
popup.geometry("300x200")
label = tk.Label(popup, text="Introduce tu nombre:")
label.pack(pady=10)
entry = tk.Entry(popup)
entry.pack(pady=5)
# Botón para cerrar la ventana
close_button = tk.Button(popup, text="Cerrar", command=popup.destroy)
close_button.pack(pady=10)
# Ventana principal
root = tk.Tk()
root.title("Ventana principal")
root.geometry("400x300")
# Botón para abrir la ventana emergente
open_button = tk.Button(root, text="Abrir ventana emergente", command=open_popup)
open_button.pack(pady=50)
root.mainloop()
Explicación del código
tk.Toplevel(root)
crea una nueva ventana que se muestra sobre la ventana principalroot
.- Elementos de la ventana: Dentro de la ventana emergente se pueden agregar etiquetas, campos de entrada y botones.
- Botón "Cerrar": La función
popup.destroy
cierra la ventana emergente.
4. Aplicación completa con diálogos y ventanas emergentes
Ahora reunamos todos los elementos revisados en una sola aplicación que incluye ventanas de diálogo estándar, selección de archivos y una ventana emergente personalizada.
import tkinter as tk
from tkinter import messagebox, filedialog
# Funciones para diálogos estándar
def show_info():
messagebox.showinfo("Información", "Este es un mensaje informativo")
def show_warning():
messagebox.showwarning("Advertencia", "Este es un mensaje de advertencia")
def show_error():
messagebox.showerror("Error", "¡Ocurrió un error!")
def confirm_exit():
response = messagebox.askyesno("Salir", "¿Estás seguro de que quieres salir?")
if response:
root.quit()
def open_file():
file_path = filedialog.askopenfilename(title="Abrir archivo", filetypes=[("Archivos de texto", "*.txt"), ("Todos los archivos", "*.*")])
if file_path:
messagebox.showinfo("Archivo seleccionado", file_path)
def save_file():
file_path = filedialog.asksaveasfilename(title="Guardar archivo", defaultextension=".txt", filetypes=[("Archivos de texto", "*.txt"), ("Todos los archivos", "*.*")])
if file_path:
messagebox.showinfo("Archivo guardado como", file_path)
def select_directory():
directory_path = filedialog.askdirectory(title="Seleccionar carpeta")
if directory_path:
messagebox.showinfo("Carpeta seleccionada", directory_path)
# Función para ventana emergente personalizada
def open_popup():
popup = tk.Toplevel(root)
popup.title("Ventana emergente")
popup.geometry("300x200")
tk.Label(popup, text="Introduce tu nombre:").pack(pady=10)
name_entry = tk.Entry(popup)
name_entry.pack(pady=5)
tk.Button(popup, text="Cerrar", command=popup.destroy).pack(pady=10)
# Ventana principal
root = tk.Tk()
root.title("Aplicación con diálogos y ventanas emergentes")
root.geometry("400x400")
# Botones para diferentes diálogos y ventanas emergentes
tk.Button(root, text="Información", command=show_info).pack(pady=5)
tk.Button(root, text="Advertencia", command=show_warning).pack(pady=5)
tk.Button(root, text="Error", command=show_error).pack(pady=5)
tk.Button(root, text="Confirmación de salida", command=confirm_exit).pack(pady=5)
tk.Button(root, text="Abrir archivo", command=open_file).pack(pady=5)
tk.Button(root, text="Guardar archivo", command=save_file).pack(pady=5)
tk.Button(root, text="Seleccionar carpeta", command=select_directory).pack(pady=5)
tk.Button(root, text="Abrir ventana emergente", command=open_popup).pack(pady=20)
root.mainloop()
GO TO FULL VERSION