CodeGym /Curso de Java /Python SELF ES /Trabajo con ventanas de diálogo y emergentes

Trabajo con ventanas de diálogo y emergentes

Python SELF ES
Nivel 50 , Lección 1
Disponible

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

  1. 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")
                
  2. 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")
                
  3. 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!")
                
  4. Solicitud de confirmación

    Las solicitudes de confirmación permiten al usuario confirmar o cancelar una acción. La función messagebox.askyesno() devuelve True o False 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

  1. 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)
                
  2. 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)
                
  3. 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 principal root.
  • 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()
    
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION