From 6ab1ca03d3c24c38d0ea70e09abb948a6244c89c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Moran?= Date: Wed, 11 Dec 2024 15:37:15 +0100 Subject: [PATCH] Clima en el panel izquierdo --- app/__pycache__/game.cpython-313.pyc | Bin 3836 -> 3828 bytes .../panel_izquierdo.cpython-313.pyc | Bin 1580 -> 4620 bytes app/__pycache__/pomodoro.cpython-313.pyc | Bin 8370 -> 8370 bytes app/panel_izquierdo.py | 66 ++++++++++++++++-- main.py | 2 +- 5 files changed, 63 insertions(+), 5 deletions(-) diff --git a/app/__pycache__/game.cpython-313.pyc b/app/__pycache__/game.cpython-313.pyc index 2d11aeec0dca52af9c87df5719e6399a8622a04f..f832a2856a17548d2396a804535fdc8f4a2bff90 100644 GIT binary patch delta 154 zcmew(`$d-TGcPX}0}wb&i%fT8-^i!OBC`$1ZD6<|D%HdFKvb-QrHAW=xD1fuc_J-4 zIfliY`H76&3)B*Dfi^;KYUBVP``9%BsSCk7B%qzcpz022NwJ^%m! delta 162 zcmew&`$v}VGcPX}0}y0Sj7<0E*vO~HqOcFhZD6<|D%HdFfsH{-yo05O>xQ@tkmC8m z#vmg%IfBKU708m6pFD|0AH_Q!v6lpsO-(>F`5Xgji# z0W|N;?7Qa8yo1_mYKkHl%^&_GJJE>Hzv&_vd=1&U0LWFOAcZ-L2;)PRus-An2ar9> zpAm>~CPYFKrQ^B6J}oG{ROTlZGrKhwsqEtjv1COis&U zFYJT!mt@8ZKey~+XXYh9MMo!E-mtQImA5)GwZ)bM$W=7&n+K*bU>4hj2(NH33kpv{ zSwRkY&F3@=n={4B1p||`eMbZ~ovR6q;{N#a)o!`5|oeH9l$Dx@J1Z0jZMG zN9817`u1(~yO~PQ!B2Y*-tOqHbWD~zCO6vS>kXy0$-4sA+x$%kwd{Ep|0=r~=6c(= zfQ7yYo*vf=>vk@uS?N3UhQSGZUP~_*8&8-N|?aH#ulOEV2^o4qS#@@~U19!3$#S+GH2 z_3_cba%gBs(rXgwq@Ts$ioK49+&v8uhsH77^gr9W-ivOCjlYh*8?A^vWwB?qVST7X zvC-}AfwDNT`uHvJ!1m5ySsYwFwDxjI1T67Y2zB?~kgv-djjbE4`@Ukiw)VT>aCh{b zmdzN7bk+n9_+s|~b)R(O!u1P4eXV(IqIB#>r8(^`$M!|v;ctmun;{fws)$`>v8y8X zm&N|oWQoE9z}VY=Xg)O*3CinzBd?yZP@WwGy;DBUZ+)cF*=+vny= zuVo*l0L}plo&e3AIMg1u-Fu<@YGF;KxgO{SS94I!~QJ#yZi&Y5r0>JQ*76| zy6j|29S^XFdLo+Q;M5H%KG_=3)?r{}Ga3@A9fZ=95`eyWh_gbEu3F%w(6*PtbK5<{ zPW2rsAPs(hq{2xW=?{!RQUEP+t}7r((vr8N}=PqTsD66%LO--=E}vo)AuGUyoB zk1~wBYqofZ)_N%QkYeL@9$U4fn$z-en`9G^Xtl)Q_(-C*|IFoM#qfUGuB49@+x8cr zQaZO(-_)$^G31M(Wu7#ad2@6s-Sr>VZkjz8Go||k})7VDm%qRQ)F8@vbq`P!} zt~CEzWqz?dzgU_xO2(U|_P18J+ue`dn7lr@#@*~bxFT-EIx8``9FuRwp4#Z>|Lq&^ zzww*5R(M)`daj*%|L3cx${kOw@Ecuy*Oos>tPPaA4zB&Q+%>Th-sq85_kQrw+ElqG zzILVDb7Um~T&-=D*kCy}SQQF1H)cMVxi+z?ukBlFUn{KtxH59OJaYQx$V_SYOlj}g zO%Am_c^9#*yEdb!@0pL5Kf3fuN2&Ye74f!o;P;ImHm+T`DIHm9y4^c?F5!+LV4U}U8mDquD?7&*FMB(_x zlfx@~^}}beC%*m9?w&2gg1abn-QLonvnA?{7jMVfN}WUNQ_y|1k5*zw%dw;X+Z2G| zzYfiIznD%;5225Tq9^0r$H$&HDRY071;EeCETMVX3#B!jv#nX^1!h(VI4LnVG9)k&5rLXz!$k}c77^$t~RZw%i=^uoGOb` zpNS{@4nYq2p;iq#zi0D9frb>JFK1Q`(+Y5Qb-V_i|CpmmeX9L^LFUEd&d-60s39Awjst!X}zC2G1mJl0q8`(aI() z`3-_-l04A^5!Irf>xni^Q^`4ekdTq_U~j^GuG!kJ z)>^g@Gddno;?h#1A@sj~SIlbnzt;6H9n{Nh$6gk5YJloCV@lpABK9CU-h=QH#6DRV KGw-0pLw^88qh0X; diff --git a/app/__pycache__/pomodoro.cpython-313.pyc b/app/__pycache__/pomodoro.cpython-313.pyc index f846e306833acfb5b65cce1c8411622c50727b7d..c7848e9cc2ae2c55974fe2b1c5d90f068611def1 100644 GIT binary patch delta 23 dcmdnwxXF?4GcPX}0}$Mw8kzoCbR*vq1pr&Q2g?8e delta 23 dcmdnwxXF?4GcPX}0}!Z9j!aJz+sL;>0RT}X27~|r diff --git a/app/panel_izquierdo.py b/app/panel_izquierdo.py index 92f7025..97609b9 100644 --- a/app/panel_izquierdo.py +++ b/app/panel_izquierdo.py @@ -1,15 +1,19 @@ import tkinter as tk import threading +import requests +from PIL import Image, ImageTk +from io import BytesIO from app import scraping class PanelIzquierdo: def __init__(self, frame, text_widget): - # Asociar el frame del panel izquierdo + # Configuración del panel self.frame = frame - self.frame.configure(bg="lightblue", width=200) + self.frame.configure(bg="lightblue", width=300) self.frame.grid_propagate(False) self.frame.columnconfigure(0, weight=1) - + + # Botón para iniciar scraping (ya existente) boton_scrapping = tk.Button( frame, text="Iniciar Scrapping", @@ -18,4 +22,58 @@ class PanelIzquierdo: args=("https://www.amazon.es/", text_widget) ).start() ) - boton_scrapping.pack(pady=5) \ No newline at end of file + boton_scrapping.pack(pady=5) + + # Clima - Título + self.weather_title = tk.Label( + frame, text="Clima Actual", bg="lightblue", font=("Helvetica", 14, "bold"), fg="navy" + ) + self.weather_title.pack(pady=10) + + # Clima - Ícono + self.weather_icon = tk.Label(frame, bg="lightblue") + self.weather_icon.pack() + + # Clima - Información + self.weather_label = tk.Label( + frame, text="Cargando clima...", bg="lightblue", font=("Helvetica", 10, "bold"), fg="black" + ) + self.weather_label.pack(pady=5) + + # Variables para el clima + self.api_key = '2f79c6f35c48e876bceae7fa7f4f4735' + self.city = 'Javea' # Cambia por la ciudad que desees + self.update_weather() + + def update_weather(self): + """Actualiza la información del clima utilizando un hilo.""" + def fetch_weather(): + try: + url = f'http://api.openweathermap.org/data/2.5/weather?q={self.city}&appid={self.api_key}&units=metric&lang=es' + response = requests.get(url) + response.raise_for_status() + data = response.json() + + # Información del clima + temp = data['main']['temp'] + weather = data['weather'][0]['description'] + icon_code = data['weather'][0]['icon'] + + # Actualiza el texto del clima + self.weather_label.config( + text=f"{self.city}:\n{temp}°C, {weather.capitalize()}" + ) + + # Descarga y muestra el ícono del clima + icon_url = f"http://openweathermap.org/img/wn/{icon_code}@2x.png" + icon_response = requests.get(icon_url) + icon_image = Image.open(BytesIO(icon_response.content)) + icon_photo = ImageTk.PhotoImage(icon_image) + self.weather_icon.config(image=icon_photo) + self.weather_icon.image = icon_photo # Referencia para evitar que se elimine + + except Exception as e: + self.weather_label.config(text=f"Error al obtener el clima.") + print(f"Error al obtener el clima: {e}") + + threading.Thread(target=fetch_weather, daemon=True).start() diff --git a/main.py b/main.py index 8a9f15f..8325f8f 100644 --- a/main.py +++ b/main.py @@ -64,7 +64,7 @@ menu_bar.add_cascade(label="Ayuda", menu=help_menu) root.config(menu=menu_bar) # Crear los frames laterales y el central -frame_izquierdo = tk.Frame(root, bg="lightblue", width=200) +frame_izquierdo = tk.Frame(root, bg="lightblue", width=300) frame_central = tk.Frame(root, bg="white") frame_derecho = tk.Frame(root, bg="lightgreen", width=200)