From b3e68271919cfde6e8b77da5fb910b36c1363e54 Mon Sep 17 00:00:00 2001 From: DennisEckerskorn Date: Tue, 3 Dec 2024 18:58:42 +0100 Subject: [PATCH] Update on app, borrador sucio --- .../centered_window.cpython-312.pyc | Bin 9514 -> 13207 bytes src/ui/centered_window.py | 252 +++++++++++------- 2 files changed, 159 insertions(+), 93 deletions(-) diff --git a/src/ui/__pycache__/centered_window.cpython-312.pyc b/src/ui/__pycache__/centered_window.cpython-312.pyc index 64eb169814dbbb70ac44ed473f086ad9289ef527..1863594240525586d436d6a7607f13e209aa50fb 100644 GIT binary patch delta 5706 zcmaJ_eQ*;=cAwGANTYAb`tXNjTk;pkfNe0wz+sF5^I^cS;9J1Ei*D>0+X7iKJ!1?$ zdBt8)b*9c0aP{R3x4Xflt_}#=IyPJ`{wE20$sbfDxsnd;$u&^5Tgg>joT}tlADe7# zDwn(-S!jX1>zaDg)9+1pPrqOP-s|~`p1EP$KU%FO3QF&u!^0QqXKiJ4Y<5-sT9Fdz zDA&(vcYVKJyBqoq+MVy`b<|!;)Lo)PMxybzeD2w(kv7eq3zS@hzP?M%Q4-Zpi&Vc( zESbH1aJ6W?MD^Q68%T#}2k8_YAWK9iNY^xVp6+)aqe89^fB&hDHsAk*`3D-`=X&j` zRaOL~gq0B_38IW?{pPA#7(wm@agq9zw_LGZw#}QTZCQTpQ=T$f@u0rZp5+6Jyd}q1 zWcZ4Yc|X3Y_t8x_r4M1od&-ew?&{!mC^R)pi7f6mY_W5fjG|sNh`eY_neH0!`e4Uu zvuI9P?lJ}2nY}D^feKlBm&&2(4z21(q{#4y61q?G98G@%8;q~jHG)dzhlaz0@n{^W z=8^b03FRM_IPw~U*5C=_S%+#Hgl|%$@Te3U-zgycAI9p67O;@N4dRQ7)DxF?Zrkj( zdG_|vtg8jDHYF@PXvlPacUni`d-@>$Kab>KQtVw88lljX$R)5N=wXL+q8@+ZDAyUZ zXKZ(JIzEA0N>`tL;Odf2#+fR?LP>B3X>k=-bEcK0W-e%}5GK~-gk;xPq%1FClzRWHN_N8$)=FIX=90BRuy5mVGo1nKpTu4oamp-$4i zgNQC7xNi8K02g2tf^0*KU%gVSIiG#01 zNwsQb()lrPqJ&hZ_85yR(wHEI$D-r1%0(1uR95+2eP<2|15#9_kE7j~ckiq%PI5m? zK{kR26bkZ@sRi++k=w+eR}#r!`Nr z3FMV|U*KnN3rS$l^x6?_d3`IWxs(HNRoiZB}?7P(aI?Tk7u!=q7(r{cg9E-@XoWi7a7r;P@ zMZ|bOlmg)3J~GBPi8xL=r!|j6Zc9+7-7uk-O3IF} z`hu0D2S?HIN@>ANbc!YT7rymYSAx?Z;1)e89$WmK&qrP3@`|NmS*pB1A5(^e0Xx0b zWNrYJiekSr2@NW~-lZ>L0Cb254KatIrn0+61O;{{@zs)z=w2ty43b2kJ8e6hAPpu( zI}iNvixtTz8q zb-?nXTC~0gJ%uQX_2 zarUA%cwSl!0vxynZW>u2vKWW}XVSJWj)bj&b?dfj7dlHcmxxFbwR4X&IHKvB*R6wV z-MaBIXz!Co$0Q^u<46cZYfzPe5>b+L^%+ln&a*b-S^Fzb z({%Tu#d)RYa?g9aZtT0h@Aig!UDG`uTQ+^hP~K+bhp!yef)4&~vxEK=-(!9Fh|XkD zRuDsJFn7A}MTf^G(kWemcTOAecAfuKJ4kR|wX04ty%5M$JtU07lA`KGK^l$6LVDFa zJ|>bxONl_pH|A4G5|H$LT2`r+6!g!5BB`8~cdFJE)e3AHh}X!cta!B^s+0a*TKtfb z;_*mKj88PZkh1<6dF2QQEnCg;Wf{IK%U3+pQ^u0~(>$9Cv}XeC4`6w_bNqn}e;~^r zddXlzCa_^)W0v2Mj0-eadFP-wP_ zxkmn%G=F+FXAUeIJIJ)aN%pWQZEK|0!uRtnB!ue*SE#V1r=R?rZ6L_Y*;6ab-e!VpAnbOY)T1Du37RLkHvq!%$bHxQRUe z?!D&C@PQoPnBg1mH7xiSZ0VN0X}&Sb@6(Pb1P|9rGkh?|ugUOh?zJy$TWCtJ-=F5! zWcePgpDU)zrmGvTxpU>AOnK;IzVQ{;Q{-epKJ0fE7r=844sTPCCQj*$lo3J>euwvz z(23{!YKloP@6;ynSiqyt`<-B=Ok@+xyKsVdpGoP9o>$By*bwCCPTNT|O7cbJ%$v28 zqKARCQb(b(DOMo~uU14uKK(4(pQJ=;ihY}%*^$3b&=b^o<|H*i160(&#sOi&z~*+b zeMo5Cu%&flTWiZe+rUPlP1xKj4Ggub`a^=4L=h4F00x+Jy%Y&ZAQ&gh0I>l5817#N zyAg_`fDjGD2OzDKP#`Jfh-y>s=o>|WB2(%X^b2pk}5Zb zB5+ulhY?h+`y2pGWhaD)0$DR*f7Q@+WPkWT_en^M_V=CqY6Oy0T9S#g0D%Pz{y98O z2LAvCiUi)u|4D1{y$F{(0nPA z-1EEbT{YB4HO8F`^U)ex*LLQk?HtqxiB}5cIavP|S_oDNk%&4%IwJEvH^t!fj%qto zK+P1JU?C3zUNW75TmqHBqXGX3?N27)_(KRu)M)7#^&;}VF3}={Rp?hED86@c{fMHB zZEbEA#v)DRm^T5Z@(~G*3S&)iG~5iNAvAAjYHMC;?>yTvX=os4nxxnAyfMHIPX zR8ml65ashx$T4CnOK^lfgz1Gil}FN9ND>rTWk_r?Lx@nu<@`~TJuSy$=%>U`zk(l_ zO8AU)L1hOc$_14fM^Vy)JQk11lFE`9$*}2?c@(Ws*k zx*pU$@IIJ$IPox&J}#zh(lqnL<R)zce>2g05q>19wjE zUUVHPy{3o%6Z(v6Rob%Z*A{2m-F9yzx2Y$ysVCibAYF1WYdN&&D*YpL^?R5`o~?kV zXz+WLmz-}4F=W!JC7Ua0upu9!3>p-QAqubOsu)qP{k^ah-lQqTibJIlXr_;^ftAus$9D4u5!F9o1{((wzhkk5i3?s86Zu;U@y z`u^*4r)E#hcg>%DX;+nNeYwhYnaXupOVbmJ=f!;whV@U4u} zZ5jT|?8P6LeilG~2SzGOw$Ll~VNl`knf>(R`?t-TX-GjY(7Kxb7u;k0 z&z%`~M872BYX=rU^U8X?@UQ0I@g>{m^sn%wy^cczr1KB$HS}jVYwz-h7?nQ+e+k)mWUc6>WCnjUf#Eat`XU6i1-ejB7%IL_92MO z4-Md!x~3%g+TbDft9EVr1r%H;|tw{f|_!!<6q*rBbVf@@peYUkRQ8+dL% zz3et|YnJ_HZuN47ktZ;*y9;{jQ?$%z&Jn}^Z(Z-B|kKQBqWE}5c6d3MlLB;S?u7~)L!G2l<{G7%G#bAn zdUDsTv^n>_>>7mFpHXv^M)lJw)z7H*+=Da1G&Mo@JG!Zew0wwu%FveO-RvJ|hZIGc zlFvV$7d~P>P+1B|(wzWTsi(YcR+^FK#c64Uul}c*vf3Z>p+|gZh2Oo( z+wgnlO4C=ojK464xOy7a#`lZD!VIO-Dw8)Yn($*!e^H)YWFQ+1ni{554qvsrY&T!C zsuq=3t*Ve0@u!y7{WjH>w=bGDBd?!iskdRvoohjGp%Q=yqnl$|d^ncT`Jv%~XeyCH z3(GY;N7FCiChNJ<2#Kr&(8XBlvW5yFYaDskgsSl!>llZ^@Ps2m>8>g;(pLb!xk^28 z`{oYi4$ZT7&flwAai740LKfc*Tk-Ack1KW4u$Ix;)Tow3d&x`irId_9fVxP$1JM{t zjcAj_xS`%-DLk|;|Gee^ZPB?=6i;UGm$hO1ffQsW_mUVa*16~txTNmyHLpSzbdEqb zft~s7Mt*H#6uwnMxURm0?!=w-&*?tg-catNUUrC4d0c7>noOz{)4P56 zzoMn7s1UmyAx_LvZ@RYo3ic2)Y*KBIBShQrL0g|m$~$nEOU7NIi0|7xToJ7A#DB82 znp}A|4%x$o$AgdBz4hKsgZZ@wkZXZ4xJ566y+&lQz@lpSK{W&p5jc#q_7A7_gQ>Ga zsbmHn1arZpo0ViVmO|+8X5`xYU_nigP;`I*$qFm{KO!QbBgEfI;1vSx06P6s-KLI@ zjJ!RdL^JVJ5)q-GUIITM@ES$=DV>XFw2`#VxAj~)qYP>Zo$fAUtga zkT-`>QD_f7=cow1PG&2h(5_N{^#>&w~Olc_Vl}0UPO-HsDGFr@2Rg9+lQDM-vJfA;$4!LWyeW zNqZa6t0m)VN>())h|?e?8X^!Q$!UYhi1m9U;#2MrJ%%-R?e2FWQ0EeaptKq60uKci z%JGu>g~M-wH~nh>V8LHJm(6A8+n4sQ_zzCoR(a23KKO_a-b&w|xH*xJ-iPs*rLV#6$#MqaUeyPS{>8U_ zQBpU4HJ}Fb#kkks3dIoG%5^1C(Izs5=4>bwy-8x50Dw26PE4du!kell@0gD#FUJ)G6|^Ox5nL1S(<(k5 zn2|1$AU2^5kqzv}PXeKiOC&4l3lZCnGSIp6r%rbCpd^VHBY*&O0rc7fTN_MGpku__ zMj(Y-gBiLE|0cLMGy{%wT|t(<;9Me?m~URHy5GIxJGJ~QSVs#M2q1UZvt2})+Z%0v z$}4To(8|JY~%b+Xy&f5FmD#ZQ*nCY>j=XiR~y z#=3^ay2kp(=1H+5g_M>lxuLnGsUE#U)_9M=ECECPOhNs|@mh8sulZP4Pfyp`!XX;x zOPVKi3@7~P!eAQ&lvkc^f8z1aoynb< zFJ3CYckyB0>nomt>Eo+5=j`d3)3@4gciil_(>Q(lD_iZqIEY8PV6iB0ZVdc&)mh&U zUDZ%0uU54JV(u1b<01RAB8#WKHrfL}#Gmnm__18Xsv22+QCl-<>YQZ!~%Q V|7OP+I&!0Xt}oa3oFcZ7{C|3srxO4G diff --git a/src/ui/centered_window.py b/src/ui/centered_window.py index 1b11b4e..8b1c4e0 100644 --- a/src/ui/centered_window.py +++ b/src/ui/centered_window.py @@ -2,6 +2,10 @@ import customtkinter as ctk import webbrowser import subprocess import os +import threading +import random +import datetime +import requests class CenteredWindow(ctk.CTk): def __init__(self, title="MultiApp", width_percentage=0.8, height_percentage=0.8): @@ -33,15 +37,16 @@ class CenteredWindow(ctk.CTk): self.configure(bg_color="lightgray") #Barra superior con Botones: - self.create_menuBar() + #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, fg_color="lightgray") + menu_bar = ctk.CTkFrame(self, height=25) menu_bar.pack(side=ctk.TOP, fill=ctk.X) #Botones del menuBar: @@ -59,6 +64,157 @@ class CenteredWindow(ctk.CTk): ) btn.pack(side=ctk.LEFT, padx=5, pady=5) + def create_left_panel(self): + # Panel izquierdo + left_panel = ctk.CTkFrame(self, width=200) + 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)], + } + + for section, buttons in sections.items(): + if section: + section_label = ctk.CTkLabel(left_panel, text=section, font=("Arial", 12, "bold")) + section_label.pack(anchor=ctk.W, pady=5, padx=10) + + for text, command in buttons: + 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) + center_panel.pack(side=ctk.TOP, fill=ctk.BOTH, expand=True, padx=(10, 10), pady=10) + + tab_view = ctk.CTkTabview(center_panel, width=500, height=500) + tab_view.pack(fill=ctk.BOTH, expand=True) + + tabs = ["Resultados Scrapping", "Navegador", "Correos", "Juego", "Sistema"] + for tab in tabs: + tab_view.add(tab) + + # Agregar contenido a las pestañas + for tab in tabs: + 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) + right_panel.pack(side=ctk.RIGHT, fill=ctk.Y, padx=10, pady=10) + + # Chat + chat_label = ctk.CTkLabel(right_panel, text="Chat", font=("Arial", 14, "bold"), text_color="red") + chat_label.pack(anchor=ctk.W, pady=5, padx=10) + + chat_box = ctk.CTkTextbox(right_panel, height=100) + chat_box.pack(fill=ctk.X, padx=10, pady=5) + + send_button = ctk.CTkButton(right_panel, text="Enviar", command=self.dummy_action) + send_button.pack(pady=5, padx=10) + + # Lista de alumnos + for i in range(1, 4): + student_label = ctk.CTkLabel(right_panel, text=f"Alumno {i}", font=("Arial", 12, "bold"), text_color="black") + student_label.pack(anchor=ctk.W, pady=5, padx=10) + + student_info = ctk.CTkLabel( + right_panel, + text="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", + wraplength=200, + justify="left", + ) + 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) + self.bottom_bar.pack(side=ctk.BOTTOM, fill=ctk.X, padx=0, pady=0) + + # Diccionario para las etiquetas dinámicas + self.info_labels = { + "hora": ctk.CTkLabel(self.bottom_bar, text="Hora: --:--:--", font=("Arial", 12), text_color="black"), + "fecha": ctk.CTkLabel(self.bottom_bar, text="Fecha: --/--/----", font=("Arial", 12), text_color="black"), + "temperatura": ctk.CTkLabel(self.bottom_bar, text="Temperatura local: --°C", font=("Arial", 12), text_color="black"), + "emails": ctk.CTkLabel(self.bottom_bar, text="Correos sin leer: 0", font=("Arial", 12), text_color="black"), + } + + # Empaquetar las etiquetas horizontalmente + 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 + self.update_time() + + # 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.now().strftime('%H:%M:%S') + current_date = datetime.now().strftime('%d/%m/%Y') + + # Actualiza las etiquetas + self.info_labels["hora"].configure(text=f"Hora: {current_time}") + self.info_labels["fecha"].configure(text=f"Fecha: {current_date}") + + # Programa la próxima actualizació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: @@ -91,97 +247,7 @@ class CenteredWindow(ctk.CTk): - def create_left_panel(self): - # Panel izquierdo - left_panel = ctk.CTkFrame(self, fg_color="lightgray", width=200) - 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)], - } - - for section, buttons in sections.items(): - if section: - section_label = ctk.CTkLabel(left_panel, text=section, font=("Arial", 12, "bold")) - section_label.pack(anchor=ctk.W, pady=5, padx=10) - - for text, command in buttons: - 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, fg_color="white") - center_panel.pack(side=ctk.LEFT, fill=ctk.BOTH, expand=True, padx=10, pady=10) - - tab_view = ctk.CTkTabview(center_panel, width=400, height=300) - tab_view.pack(fill=ctk.BOTH, expand=True) - - tabs = ["Resultados", "Navegador", "Correos", "Tareas", "Alarmas", "Enlaces"] - for tab in tabs: - tab_view.add(tab) - - # Agregar contenido a las pestañas - for tab in tabs: - 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, fg_color="lightgray", width=250) - right_panel.pack(side=ctk.RIGHT, fill=ctk.Y, padx=10, pady=10) - - # Chat - chat_label = ctk.CTkLabel(right_panel, text="Chat", font=("Arial", 14, "bold"), text_color="red") - chat_label.pack(anchor=ctk.W, pady=5, padx=10) - - chat_box = ctk.CTkTextbox(right_panel, height=100) - chat_box.pack(fill=ctk.X, padx=10, pady=5) - - send_button = ctk.CTkButton(right_panel, text="Enviar", command=self.dummy_action) - send_button.pack(pady=5, padx=10) - - # Lista de alumnos - for i in range(1, 4): - student_label = ctk.CTkLabel(right_panel, text=f"Alumno {i}", font=("Arial", 12, "bold"), text_color="black") - student_label.pack(anchor=ctk.W, pady=5, padx=10) - - student_info = ctk.CTkLabel( - right_panel, - text="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", - wraplength=200, - justify="left", - ) - student_info.pack(anchor=ctk.W, padx=10) - - - def create_bottom_bar(self): - # Barra inferior - bottom_bar = ctk.CTkFrame(self, fg_color="lightblue", height=40) - bottom_bar.pack(side=ctk.BOTTOM, fill=ctk.X) - - info_labels = [ - "Correos sin leer: 0", - "Temperatura local: 25°C", - "Fecha: 02/12/2024", - "Hora: 14:30", - ] - - for info in info_labels: - label = ctk.CTkLabel(bottom_bar, text=info, font=("Arial", 12), text_color="black") - label.pack(side=ctk.LEFT, padx=10) - - def dummy_action(self): - print("Acción no implementada") - +