diff --git a/logica/T1/TrafficMeter.py b/logica/T1/TrafficMeter.py new file mode 100644 index 0000000..e69de29 diff --git a/logica/T1/backup.py b/logica/T1/backup.py new file mode 100644 index 0000000..517f3e2 --- /dev/null +++ b/logica/T1/backup.py @@ -0,0 +1,5 @@ +""" +hay que crear el script de backup + ver el sistema operativo + ejecutar el script segun SO +""" diff --git a/logica/T1/geterSystemRecource.py b/logica/T1/geterSystemRecource.py new file mode 100644 index 0000000..e69de29 diff --git a/logica/T1/runVScode.py b/logica/T1/runVScode.py new file mode 100644 index 0000000..ef420e2 --- /dev/null +++ b/logica/T1/runVScode.py @@ -0,0 +1,37 @@ +import subprocess +import platform + + +def abrir_vscode(): + """ + Intenta abrir Visual Studio Code utilizando el comando 'code'. + + Este comando asume que VS Code ha sido instalado correctamente y que + el ejecutable 'code' está disponible en el PATH del sistema (lo cual + suele ser el caso si se habilita la opción al instalar VS Code). + """ + comando = 'code' + + # Notificación en consola para el desarrollador + print(f"[*] Intentando ejecutar el comando: '{comando}'...") + + try: + # Ejecutamos el comando de forma asíncrona (Popen) para evitar que + # la interfaz de Tkinter se bloquee mientras se abre VS Code. + subprocess.Popen([comando]) + print("[+] Visual Studio Code lanzado exitosamente.") + + except FileNotFoundError: + # Esto ocurre si el comando 'code' no está en el PATH + mensaje_error = ( + "===================================================\n" + f"ERROR: El comando '{comando}' no se encontró en el PATH del sistema.\n" + "Asegúrate de que Visual Studio Code esté instalado y de que el comando 'code' " + "esté configurado para ser accesible desde la terminal.\n" + "===================================================" + ) + print(mensaje_error) + except Exception as e: + # Captura cualquier otro error (ej. permisos) + print(f"[-] Ocurrió un error inesperado al intentar abrir VS Code: {e}") + diff --git a/logica/T1/textEditor.py b/logica/T1/textEditor.py new file mode 100644 index 0000000..e69de29 diff --git a/logica/T2/alarm.py b/logica/T2/alarm.py new file mode 100644 index 0000000..e69de29 diff --git a/logica/T2/getLocalTime.py b/logica/T2/getLocalTime.py new file mode 100644 index 0000000..e69de29 diff --git a/logica/T2/miniGame.py b/logica/T2/miniGame.py new file mode 100644 index 0000000..e69de29 diff --git a/logica/T2/musicReproductor.py b/logica/T2/musicReproductor.py new file mode 100644 index 0000000..e69de29 diff --git a/logica/T2/scraping.py b/logica/T2/scraping.py new file mode 100644 index 0000000..e69de29 diff --git a/logica/controlador.py b/logica/controlador.py new file mode 100644 index 0000000..3f2ffb6 --- /dev/null +++ b/logica/controlador.py @@ -0,0 +1,33 @@ +import platform +from contextlib import nullcontext + +_OS = nullcontext + +def getPlataforma(): + if _OS== nullcontext: + + +def accion_placeholder(nombre_accion): + """ + Función placeholder temporal para acciones que aún no tienen implementación. + Simplemente imprime un mensaje en la consola. + """ + print(f"Acción pendiente de implementación: {nombre_accion}") + +def _obtener_datos_sistema(): + """ + Función placeholder para la tarea T1.3 (recursos del sistema). + Esta función se llenará con la lógica para obtener datos de CPU/RAM. + """ + print("Iniciando la recopilación de datos del sistema...") + # Lógica a añadir aquí en el futuro (usando psutil, por ejemplo) + tmpVar = platform.system().lower() + if tmpVar.__contains__("windows"): + print("Sistema operativo detectado: Windows") + return {"WINDOWS"} + elif tmpVar.__contains__("darwin"): + print("Sistema operativo detectado: MacOS") + return {"MACOS"} + else: + print("Sistema operativo detectado: Linux/Unix") + return {"LINUX"} \ No newline at end of file diff --git a/res/scripts/script.ps1 b/res/scripts/script.ps1 new file mode 100644 index 0000000..3562d68 --- /dev/null +++ b/res/scripts/script.ps1 @@ -0,0 +1,5 @@ +out-null +cls + +$saludo='Hola Usuario' +Write-Host $saludo \ No newline at end of file diff --git a/res/scripts/sript.sh b/res/scripts/sript.sh new file mode 100644 index 0000000..8214f7b --- /dev/null +++ b/res/scripts/sript.sh @@ -0,0 +1 @@ +echo "Hello, World!" \ No newline at end of file diff --git a/vista/panel_lateral.py b/vista/panel_lateral.py index c808f58..17e9314 100644 --- a/vista/panel_lateral.py +++ b/vista/panel_lateral.py @@ -1,5 +1,9 @@ import tkinter as tk from tkinter import ttk +# Importación de la lógica específica para abrir VS Code +from logica.T1.runVScode import abrir_vscode +# Importación de las acciones generales (placeholders y futuras funciones) +from logica.controlador import accion_placeholder, obtener_datos_sistema class PanelLateral(ttk.Frame): @@ -9,41 +13,70 @@ class PanelLateral(ttk.Frame): super().__init__(parent, *args, **kwargs) self.pack(fill="y", padx=5, pady=5) + self.configurar_estilos_locales(parent) # Asegura que los estilos funcionen + # Entrada superior (amarilla) - ttk.Entry(self, width=25, style='Yellow.TEntry').pack(fill="x", pady=10, padx=5) + ttk.Entry(self, width=25, style='Yellow.TEntry').pack(fill="x", pady=10, padx=5, ipady=3) # 1. Área de Extracción/Navegación - self.crear_seccion( - parent_frame=self, - titulo="", - botones=["Extraer datos", "Navegar", "Buscar API Google"] - ) + acciones_extraccion = [ + # T1.3 - Conectamos el botón de extracción a la función de obtención de datos del sistema + ("Extraer datos", lambda: obtener_datos_sistema()), + ("Navegar", lambda: accion_placeholder("Navegar")), + ("Buscar API Google", lambda: accion_placeholder("Buscar API Google")) + ] + self.crear_seccion(self, titulo="", acciones=acciones_extraccion) # 2. Área de Aplicaciones - self.crear_seccion( - parent_frame=self, - titulo="Aplicaciones", - botones=["Visual Code", "App2", "App3"] - ) + acciones_aplicaciones = [ + # CONEXIÓN: Usa la función específica abrir_vscode + ("Visual Code", abrir_vscode), + ("App2", lambda: accion_placeholder("App2")), + ("App3", lambda: accion_placeholder("App3")) + ] + self.crear_seccion(self, titulo="Aplicaciones", acciones=acciones_aplicaciones) # 3. Área de Procesos Batch - self.crear_seccion( - parent_frame=self, - titulo="Procesos batch", - botones=["Copias de seguridad"] - ) + acciones_batch = [ + ("Copias de seguridad", lambda: accion_placeholder("Copias de seguridad")) + ] + self.crear_seccion(self, titulo="Procesos batch", acciones=acciones_batch) # Espaciador para empujar los elementos inferiores si los hubiera + # CORRECCIÓN: Eliminamos el argumento 'bg' problemático y permitimos la herencia de color. tk.Frame(self, height=1).pack(expand=True, fill="both") - def crear_seccion(self, parent_frame, titulo, botones): - """Función helper para crear secciones de etiquetas y botones.""" - if titulo: - ttk.Label(parent_frame, text=titulo).pack(fill="x", pady=(10, 0), padx=5) + def configurar_estilos_locales(self, parent): + """Configura estilos que deberían estar en la ventana principal, o crea placeholders.""" + style = ttk.Style(parent) + # Estilo de la entrada amarilla + style.configure('Yellow.TEntry', + fieldbackground='#fff8e1', + foreground='#333333', + padding=[5, 5], + relief='solid', + borderwidth=1) - frame_botones = ttk.LabelFrame(parent_frame, text="") + # Estilo de los botones (Verde) + style.configure('Green.TButton', + background='#4CAF50', + foreground='white', + font=('Arial', 10, 'bold'), + relief='flat', + padding=[10, 5]) + style.map('Green.TButton', background=[('active', '#388E3C'), ('pressed', '#1B5E20')]) + + def crear_seccion(self, parent_frame, titulo, acciones): + """ + Función helper para crear secciones de etiquetas y botones. + 'acciones' es una lista de tuplas: (texto_boton, comando_a_ejecutar) + """ + if titulo: + ttk.Label(parent_frame, text=titulo, font=('Arial', 11, 'bold')).pack(fill="x", pady=(10, 0), padx=5) + + frame_botones = ttk.Frame(parent_frame, style='TFrame') # Usando TFrame para el contenedor de botones frame_botones.pack(fill="x", pady=5, padx=5) - for texto_boton in botones: - # Todos los botones usan el estilo 'Green.TButton' para simular el color - ttk.Button(frame_botones, text=texto_boton, style='Green.TButton').pack(fill="x", pady=5) \ No newline at end of file + for texto_boton, comando in acciones: + # Conexión del botón: + ttk.Button(frame_botones, text=texto_boton, command=comando, style='Green.TButton').pack(fill="x", pady=5) \ No newline at end of file