From 7221395724e4128d40e693d80b529728a309ad16 Mon Sep 17 00:00:00 2001 From: DennisEckerskorn Date: Wed, 4 Dec 2024 18:49:17 +0100 Subject: [PATCH] Restructured classes and separated threads and processes --- .../processes_manager.cpython-312.pyc | Bin 0 -> 1650 bytes .../threads_manager.cpython-312.pyc | Bin 0 -> 4848 bytes src/services/processes_manager.py | 28 ++++ src/services/threads_manager.py | 62 +++++++ .../centered_window.cpython-312.pyc | Bin 13363 -> 8666 bytes src/ui/centered_window.py | 152 ++---------------- 6 files changed, 105 insertions(+), 137 deletions(-) create mode 100644 src/services/__pycache__/processes_manager.cpython-312.pyc create mode 100644 src/services/__pycache__/threads_manager.cpython-312.pyc create mode 100644 src/services/processes_manager.py create mode 100644 src/services/threads_manager.py diff --git a/src/services/__pycache__/processes_manager.cpython-312.pyc b/src/services/__pycache__/processes_manager.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7e006a2c63b0e0f77dd81b24be941827333497ae GIT binary patch literal 1650 zcmZWp&2Jk;6rZuz@kbJS9r97p6ph?i%C?CsaY7M7YDL3^L{>x&F_u=F-HBtz-Z3+~ zbsV_}q5J_9gc1pXd?e~0fl7~Dnxc?u$&FsPMM))4xbViiYdbL7ee*tl@4eaC_sjTr z3c>p3+hXM>1))Er5H65=>vA5p17sl!*HOveaS2DzN63ooBP;qe;yaciZLBGON@3OX zRXz>u=yDR|14K~?Tc{MVq88rArD!{%DPFqBnMs9MF>Iqkxfy1c2r+o0@Lra%j8CEt zw(t&=#b+GQ_^TFX2^Fw+A{G2J@W7}&0&$UET;7qGy;U0txxo%S1yQx+KpS$MNNAOq z&Sll!!-Y-8y z^lK+Uch_;YjCy_3Fn9C@+)uciA=nDFg;Apr)L_tv!3njAX+Q(e3+0^g0x2>M(iSxx zwm@=gLHERF4%uR^ZRG~3ym-*37Y|zVM$B!_8gy@J-QKZT%kCc^k;k_ee<+hIkyS0> zrG&c)@$wh)Vnx=ZwwG$r%@8SCp^m5Y)UhV7+K!i9uGZ-)bCzWpJs>anaMz?wr^;+C z<|%^Kx4iLdAIuvaI#W;m@47Y zUU8l3vTK_%A1LK*3T$P;%`!wjszN*Eperi$hCdq$&9*l#ThYVf_GTe+XnGW`S!GG$ zYam~s^NDma|0*-vO}@-%XX@LhDmhk3_ip#riF)r<_MNWwGJ6;F2k9s2!`)xi`BQcA zSY7;a=R{q4txmm|UOZ6?f1hQ@1;WX>v$5=piQI2vx6d*+E>LWM{2CB4Pcq%n6LkT? z4&z;XD86c(s&mKc+?yE6F8*^K2mdP}XX}?Y?@yv1G$79sqmoWeKDZNob|)d}yV`?% z^yhpG_*D(>P5l1~!SGDzx@|P5u6rq6Z!pWPOMXn(KXZ+`Z{ahL=?Gl{MSNNkIbnN5 zG9nISAH9jp#PWPLv}jQ-=O33N&iB75xt?8OTqWN3vwgsCfhcFDm;!Ph#TfsNvhe(+ M+`#z@1f&=CFYRopbN~PV literal 0 HcmV?d00001 diff --git a/src/services/__pycache__/threads_manager.cpython-312.pyc b/src/services/__pycache__/threads_manager.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d7623ae28182c5af360770337f43de8f03c8485a GIT binary patch literal 4848 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 P@5brtr+-ahn&|vr<4$0J diff --git a/src/ui/centered_window.py b/src/ui/centered_window.py index f59afa7..53bec22 100644 --- a/src/ui/centered_window.py +++ b/src/ui/centered_window.py @@ -2,11 +2,10 @@ import customtkinter as ctk import webbrowser import subprocess import os -import threading -import random -import datetime -import time -import requests + +from services.threads_manager import ThreadsManager +from services.processes_manager import ProcessManager + class CenteredWindow(ctk.CTk): def __init__(self, title="MultiApp", width_percentage=0.8, height_percentage=0.8): @@ -16,6 +15,9 @@ class CenteredWindow(ctk.CTk): # Titulo de la ventana: self.title(title) + self.thread_manager = ThreadsManager(self) + self.process_manager = ProcessManager() + # Obtener la resolucion de la pantalla: screen_width = self.winfo_screenwidth() screen_height = self.winfo_screenheight() @@ -36,34 +38,11 @@ class CenteredWindow(ctk.CTk): def configure_window(self): # Configuracion de la ventana: self.configure(bg_color="lightgray") - - #Barra superior con Botones: - #self.create_menuBar() self.create_left_panel() self.create_right_panel() self.create_center_panel() self.create_bottom_bar() - self.start_threads() - - - def create_menuBar(self): - menu_bar = ctk.CTkFrame(self, height=25) - menu_bar.pack(side=ctk.TOP, fill=ctk.X) - - #Botones del menuBar: - # Agregar botones de menú - menus = ["Procesos", "T2.Threads", "T3.Sockets", "T4.Servicios", "T5.Seguridad", "Configuración"] - for menu in menus: - btn = ctk.CTkButton( - menu_bar, - text=menu, - command=lambda m=menu: self.on_menu_click(m), - width=100, - height=20, - fg_color="blue", - hover_color="lightblue" - ) - btn.pack(side=ctk.LEFT, padx=5, pady=5) + self.thread_manager.start_threads() def create_left_panel(self): # Panel izquierdo @@ -71,12 +50,12 @@ class CenteredWindow(ctk.CTk): left_panel.pack(side=ctk.LEFT, fill=ctk.Y, padx=10, pady=10) # Secciones y botones sections = { - "": [("Extraer datos", self.dummy_action), - ("Navegar", self.open_chrome), - ("Buscar API Google", self.dummy_action)], - "Aplicaciones": [("Visual Code", self.open_visual_studio_code), - ("Windows Explorer", self.open_explorer), ("Notepad++", self.open_notepad_plus)], - "Procesos batch": [("Copias de seguridad", self.dummy_action)], + "Aplicaciones": [ + ("Abrir Chrome", lambda: self.process_manager.open_resource("browser", "https://google.com", "Cannot open browser")), + ("Visual Studio Code", lambda: self.process_manager.open_resource("program", r"C:\Program Files\Microsoft VS Code\Code.exe", "Can't find VSCode")), + ("Explorador de Windows", lambda: self.process_manager.open_resource("program", "explorer.exe", "Can't open Windows Explorer")), + ("Notepad++", lambda: self.process_manager.open_resource("program", r"C:\Program Files\Notepad++\notepad++.exe", "Can't open Notepad++")) + ] } for section, buttons in sections.items(): @@ -88,7 +67,6 @@ class CenteredWindow(ctk.CTk): btn = ctk.CTkButton(left_panel, text=text, command=command, width=150) btn.pack(pady=5, padx=10) - def create_center_panel(self): # Panel central con pestañas center_panel = ctk.CTkFrame(self) @@ -106,8 +84,6 @@ class CenteredWindow(ctk.CTk): label = ctk.CTkLabel(tab_view.tab(tab), text=f"Contenido de {tab}", font=("Arial", 12)) label.pack(pady=10) - - def create_right_panel(self): # Panel derecho right_panel = ctk.CTkFrame(self, width=250) @@ -136,7 +112,6 @@ class CenteredWindow(ctk.CTk): ) student_info.pack(anchor=ctk.W, padx=10) - def create_bottom_bar(self): # Crear la barra inferior self.bottom_bar = ctk.CTkFrame(self, fg_color="lightblue", height=40) @@ -154,102 +129,5 @@ class CenteredWindow(ctk.CTk): for label in self.info_labels.values(): label.pack(side=ctk.LEFT, padx=10, pady=5) - - - def start_threads(self): - # Hilo para actualizar el reloj - threading.Thread(target=self.update_time, daemon=True).start() - - # Hilo para actualizar la temperatura - threading.Thread(target=self.update_temperature, daemon=True).start() - - # Hilo para actualizar correos (simulado) - threading.Thread(target=self.update_emails, daemon=True).start() - - def update_time(self): - # Obtén la hora y la fecha actual - current_time = datetime.datetime.now().strftime('%H:%M:%S') - current_date = datetime.datetime.now().strftime('%d/%m/%Y') - - # Actualiza las etiquetas en el hilo principal - self.info_labels["hora"].configure(text=f"Hora: {current_time}") - self.info_labels["fecha"].configure(text=f"Fecha: {current_date}") - - # Programa la próxima ejecución en 1000 ms (1 segundo) - self.after(1000, self.update_time) - - - - def update_temperature(self): - # Actualiza la temperatura real cada 10 minutos usando la API de OpenWeatherMap - API_KEY = "4ba2b87d7fa32934530b5b4a5a83ebf7" # Reemplaza con tu clave de OpenWeatherMap - CITY = "Madrid" # Cambia por tu ciudad - while True: - try: - temperature = self.get_real_temperature(API_KEY, CITY) - if temperature is not None: - self.info_labels["temperatura"].configure(text=f"Temperatura local: {temperature}°C") - except Exception as e: - print(f"Error al obtener la temperatura: {e}") - threading.Event().wait(600) # Actualiza cada 10 minutos - - def get_real_temperature(self, api_key, city): - # Función para obtener la temperatura real desde OpenWeatherMap - url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric" - response = requests.get(url) - if response.status_code == 200: - data = response.json() - return data['main']['temp'] # Retorna la temperatura en °C - else: - print(f"Error al obtener la temperatura: {response.status_code}") - return None - - def update_emails(self): - # Simula la actualización de correos no leídos cada 10 segundos - count = 0 - while True: - count += random.randint(0, 2) # Simula la llegada de 0-2 correos - self.info_labels["emails"].configure(text=f"Correos sin leer: {count}") - self.after(1000, self.update_time) # Actualiza cada 10 segundos - threading.Event().wait(1) - def dummy_action(self): - print("Acción no implementada") - - - def open_chrome(self): - try: - webbrowser.get('chrome').open('https://google.es') - except: - webbrowser.open('https://google.es') - - - def open_visual_studio_code(self): - try: - vs_code_path = r"C:\Program Files\Microsoft VS Code\Code.exe" - subprocess.Popen([vs_code_path]) - except FileNotFoundError: - print ("Can't find VSCode") - - - def open_explorer(self): - try: - subprocess.Popen(['explorer.exe']) - except: - print("Can't open Windows Explorer") - - - def open_notepad_plus(self): - try: - notepad_path = r"C:\Program Files\Notepad++\notepad++.exe" - subprocess.Popen([notepad_path]) - except: - print("Can't open NotePad++") - - - - - - - - + print("Acción no implementada") \ No newline at end of file