import tkinter as tk
from tkinter import ttk
class SettingsApp(tk.Tk):
def __init__(self):
super().__init__()
# Configurar la ventana principal
self.title("Configuración de la Aplicación (Demostración LabelFrame)")
self.geometry("600x400")
self.configure(bg='#f0f0f0')
# Crear el contenedor principal con relleno
main_container = ttk.Frame(self, padding="20")
main_container.pack(fill=tk.BOTH, expand=True)
# Crear y empaquetar la sección de información personal
self.create_personal_info_frame(main_container)
# Crear y empaquetar la sección de preferencias
self.create_preferences_frame(main_container)
# Crear y empaquetar la configuración de notificaciones
self.create_notification_frame(main_container)
def create_personal_info_frame(self, parent: ttk.Frame) -> None:
"""Crea un LabelFrame para la configuración de información personal."""
personal_frame = ttk.LabelFrame(
parent,
text="Información Personal",
padding="10"
)
personal_frame.pack(fill=tk.X, pady=(0, 10))
# Crear y empaquetar los elementos del formulario
ttk.Label(personal_frame, text="Nombre:").grid(row=0, column=0, sticky=tk.W, pady=5)
ttk.Entry(personal_frame).grid(row=0, column=1, sticky=tk.EW, padx=(10, 0))
ttk.Label(personal_frame, text="Email:").grid(row=1, column=0, sticky=tk.W, pady=5)
ttk.Entry(personal_frame).grid(row=1, column=1, sticky=tk.EW, padx=(10, 0))
# Configurar pesos de columna de la cuadrícula
personal_frame.columnconfigure(1, weight=1)
def create_preferences_frame(self, parent: ttk.Frame) -> None:
"""Crea un LabelFrame para las preferencias de la aplicación."""
pref_frame = ttk.LabelFrame(
parent,
text="Preferencias de la Aplicación",
padding="10"
)
pref_frame.pack(fill=tk.X, pady=(0, 10))
# Selección de tema
ttk.Label(pref_frame, text="Tema:").grid(row=0, column=0, sticky=tk.W, pady=5)
theme_combo = ttk.Combobox(
pref_frame,
values=["Claro", "Oscuro", "Sistema"],
state="readonly"
)
theme_combo.set("Claro")
theme_combo.grid(row=0, column=1, sticky=tk.EW, padx=(10, 0))
# Selección de idioma
ttk.Label(pref_frame, text="Idioma:").grid(row=1, column=0, sticky=tk.W, pady=5)
lang_combo = ttk.Combobox(
pref_frame,
values=["Inglés", "Español", "Francés", "Alemán"],
state="readonly"
)
lang_combo.set("Inglés")
lang_combo.grid(row=1, column=1, sticky=tk.EW, padx=(10, 0))
# Configurar pesos de columna de la cuadrícula
pref_frame.columnconfigure(1, weight=1)
def create_notification_frame(self, parent: ttk.Frame) -> None:
"""Crea un LabelFrame para la configuración de notificaciones."""
notif_frame = ttk.LabelFrame(
parent,
text="Configuración de Notificaciones",
padding="10"
)
notif_frame.pack(fill=tk.X)
# Notificaciones por correo electrónico
ttk.Checkbutton(
notif_frame,
text="Habilitar notificaciones por correo electrónico"
).grid(row=0, column=0, sticky=tk.W, pady=2)
# Notificaciones de escritorio
ttk.Checkbutton(
notif_frame,
text="Habilitar notificaciones de escritorio"
).grid(row=1, column=0, sticky=tk.W, pady=2)
# Notificaciones de sonido
ttk.Checkbutton(
notif_frame,
text="Habilitar notificaciones de sonido"
).grid(row=2, column=0, sticky=tk.W, pady=2)
if __name__ == "__main__":
app = SettingsApp()
app.mainloop()