From d03d7a4a3d212b92fb539691dba25dc81fb61cd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Moran?= Date: Thu, 12 Dec 2024 13:30:00 +0100 Subject: [PATCH] To do list --- app/__pycache__/graphics.cpython-313.pyc | Bin 4127 -> 4132 bytes .../panel_izquierdo.cpython-313.pyc | Bin 7079 -> 7079 bytes app/__pycache__/todo_list.cpython-313.pyc | Bin 0 -> 3549 bytes app/graphics.py | 4 +- app/panel_izquierdo.py | 2 +- app/todo_list.py | 61 ++++++++++++++++++ main.py | 5 ++ 7 files changed, 69 insertions(+), 3 deletions(-) create mode 100644 app/__pycache__/todo_list.cpython-313.pyc create mode 100644 app/todo_list.py diff --git a/app/__pycache__/graphics.cpython-313.pyc b/app/__pycache__/graphics.cpython-313.pyc index b92c06bf88b4a7221e0f67807fdfec7022581072..db728cc3df3c3756e135326bae0d8d1c7997addf 100644 GIT binary patch delta 370 zcmbQQutb6PGcPX}0}zB* zga(kf#gm+qUz{3WP?VXRT3n<96e?x~5(*$tq&vBWTanRb@;vUf%tk$YoBen)8C5|R z-Qq0CC`wIC$;?Z?#TEi)7U_Y+S&K^&i%N=YCg0&rVbq=M$S2I`H93^;l@Qo@ia;eR z8H&7t6wvHIeqlzx$*KJEu^<6W?jjM82^^JanR$tM$*D!=AZ3mqLIy-Afe5fMAe)Ln x0a4@yBK$yvFNlB`3}oHnu*uC&Da}c>D+-wWkY7(g{F4zsqr_(w7DhR+DgY@@RWJYm delta 368 zcmZ3YFkgZ9GcPX}0}#C8k4pcxkyn?Qk!`Xyb3UWs=GDx;jGO{NWnT(7AllSt9^Xh^$vlf>m z7L^oPPkzXoBB}!t;myp;OwLR!iqFUdnp@;KIg0O<8rW$HKk%FR delta 56 zcmZ2(zTBMaGcPX}0}$L7+Q_w8T;4D>(ZtBq%s457&-6`uViC5trmZ_%>7wbY~=)p8^Mq;zf7QY6KHQWGs1D3xMmwOmuQ$z5W0 zDa$GfFsItRSaxfO1_DHf9^_krUW}d!B&VK8M6!f+5ftdjw?OKl=&A3`k`$%LE{YDo z*`0keZ{EE3z3&ZoLZL-``~wHo##df;2H@oh(TK)fCzNAPp7I(WB~;J^ z=tWJ0UeYA!Wle@YkmA(9D^xIHRQ2E}06zhKJAa1m2}zJi4qo;(jhn8mnH2X4VR)`0 zRY-zsC0EW7l7}z3o`mqD%48kJ8vhGU6D$$-z+LyXH}8-T!$cDke3+aOc6S?pkB~z| zAt_0fmo5$&ZeGu%mvpL_8O5+I*R;|}TS>y`M%r5-Kg|v~j z9mTX1Y9?nsyywo_*34Mi(lZ}Y`?hJgLspWS&IjX6fu76F)XeG6-SgV~bD=9{YXW*0 zEWqG7*P$zrzl)Jgv9m087P&75zC8c*{JMDZ<*}Y}uL8}7nD^;dX#9jE{$tXV=r zn5+}9F<#+~KQRe-CI=^DJIT6Vz#u!Dr!-!y)jB^-XAY}zla zhjvO(#igF16g5+Tu)L)!R^D9DeJCk9z)C?l=>201OcQFr6H=z@Nsdd?IZuWtnGiLM z0>wj689Ou;kS0O=={<@DQnbfA#FWqaxI%v-bZ8hwA>FsZ7t&7nb_jmX2hc%STRKYeskmV z8_UhVA6^-IG`1lgr4i7zhbL+wT>!~{4Jn`CYhgQyVbeG~GK88tDAWm|E_k&7PjS1! zOYtdQ6_)x&GwCd(0Yz^!-zW~Gr~%nxL9#)r?}nig1;J}F@|4YTVU{Q4>>LY%D%QEX zp{53NJef93XRp)4W@YD!*N?$*TH)s)Ou_4s?#+l=j;P;6`U+RS4Met@qs4b0bz=sF zA2vQ{Tt2@Zj53FB1P8tgkYMv0eC&eG|H;QcsQ2+yE4q*|@aWWNH4c5`EI-xyHb|yx z$##H;FOBQec&&ed*KFX>D!D1PV%3j*8l6yi+6DXgUY2*gOpoH%ZtM`S6w}SYEI@2m z(cP3~22|X90;IUg`8jlNbaVH~rxT33wxTEgaJdpQg<)Si31w2_G(N^>#khD7BWX~EHBpmd0xL(M9J--7K{lN2dPp^h22G3gVq@1_Gk_6N~>=b3kB^^OvuV{`9Mu*W0Mxr z!ZC4=zSmiKnAyl{k(!N=<_Bv2zKyTb*<8`tQqzgm;7#X7Fs zKF*!1BxEmn#!aXkV{}!Z?J%7c1C~J!PAU`%ehmm-%;?#_wKH%cD z3uG^$eJ}yGMt*(9*Bu}8uyT6(V|b@{C?sD8iy|KEW-0zzX>NXfG|f)66s=GhBdvMU zn72;@Td|k_&o(3_dLFkv(5M(nu*`!|>j}LyXO(gb>xsL}stHwQh2N7#vEn0oj60q@ zoOfL)P6529!iCbOPPjn0`kWU6kK5L4rRsZOe^{+YUXwreX>&hlkl~P9FJHdw1E=|W zaG{rBPA~kN7tsA1NH%o1F!oQGgbqKv^4lxRTJhKArc;Gcyd_-w{MzzxadOotTq}$3 zz?}BZm8*}h7LB!r7eC9E+pNO)me{;0c9g}A;!p{n$6;1m$I6Ar7hqQC`CPemsBmKo z@1E^tvAsC3I=uGr^N|vchG1&Pk(Ey#e^PYTq8pde<@Vc!i7m0Ea!>uJg!k1GzQWk! zSWzpz{r<-I-E!+MC}xE^LVXKFot&z`c`(zXj9}L4!LFxsyy=DdumM zcMN!xMHv0^jIgEEq|4gLe8wE4BOt;gcF=F%2^`10ByBHAWLuQD*mhXvy0;@TcV;^h O;Lhx{baAJdmj3{KHQ=}a literal 0 HcmV?d00001 diff --git a/app/graphics.py b/app/graphics.py index b450188..b563042 100644 --- a/app/graphics.py +++ b/app/graphics.py @@ -34,7 +34,7 @@ def actualizar_grafico_criptomonedas_api(canvas, ax): canvas.draw() except Exception as e: print(f"Error al obtener datos de criptomonedas: {e}") - time.sleep(10) # Actualizar cada 10 segundos + time.sleep(60) def actualizar_grafico_ibex_api(canvas, ax): @@ -59,7 +59,7 @@ def actualizar_grafico_ibex_api(canvas, ax): canvas.draw() except Exception as e: print(f"Error al obtener datos del IBEX: {e}") - time.sleep(300) # Actualizar cada 5 minutos + time.sleep(60) # Actualizar cada 5 minutos def iniciar_hilos(canvas_cripto, ax_cripto, canvas_ibex, ax_ibex): diff --git a/app/panel_izquierdo.py b/app/panel_izquierdo.py index 7a49a70..dc072e6 100644 --- a/app/panel_izquierdo.py +++ b/app/panel_izquierdo.py @@ -96,7 +96,7 @@ class PanelIzquierdo: def fetch_news(): while True: try: - url = 'https://newsapi.org/v2/top-headlines?country=us&apiKey=b1ea42563bd848499ebad866eeedaf15' + url = 'https://newsapi.org/v2/top-headlines?country=us&apiKey=bc352d5c21cf4ebcbbcf780f4a4b78d9' response = requests.get(url) response.raise_for_status() data = response.json() diff --git a/app/todo_list.py b/app/todo_list.py new file mode 100644 index 0000000..08155de --- /dev/null +++ b/app/todo_list.py @@ -0,0 +1,61 @@ +import tkinter as tk +import threading + +def actualizar_todo_list(todo_listbox, tareas): + """Actualizar el contenido del ListBox con las tareas actuales.""" + todo_listbox.delete(0, tk.END) + for tarea, completada in tareas: + estado = "[X]" if completada else "[ ]" + todo_listbox.insert(tk.END, f"{estado} {tarea}") + +def agregar_tarea(entry, todo_listbox, tareas): + """Agregar una nueva tarea a la lista.""" + nueva_tarea = entry.get() + if nueva_tarea.strip(): + tareas.append((nueva_tarea, False)) # Agregar tarea como no completada + actualizar_todo_list(todo_listbox, tareas) + entry.delete(0, tk.END) + +def eliminar_tarea(todo_listbox, tareas): + """Eliminar la tarea seleccionada de la lista.""" + seleccion = todo_listbox.curselection() + if seleccion: + indice = seleccion[0] + tareas.pop(indice) + actualizar_todo_list(todo_listbox, tareas) + +def marcar_tarea(todo_listbox, tareas): + """Marcar la tarea seleccionada como completada o no completada.""" + seleccion = todo_listbox.curselection() + if seleccion: + indice = seleccion[0] + tarea, completada = tareas[indice] + tareas[indice] = (tarea, not completada) # Alternar el estado de completada + actualizar_todo_list(todo_listbox, tareas) + +def crear_solapa_todo(tab): + """Función para inicializar la funcionalidad de la lista To-Do en la solapa.""" + tareas = [] # Lista para almacenar las tareas + + # Entry para agregar nuevas tareas + entry = tk.Entry(tab, font=("Arial", 12)) + entry.pack(pady=10, padx=10, fill="x") + + # Botón para agregar tareas + boton_agregar = tk.Button(tab, text="Agregar", command=lambda: agregar_tarea(entry, todo_listbox, tareas)) + boton_agregar.pack(pady=5) + + # ListBox para mostrar las tareas + todo_listbox = tk.Listbox(tab, font=("Arial", 12), height=10) + todo_listbox.pack(pady=10, padx=10, fill="both", expand=True) + + # Botón para eliminar tareas + boton_eliminar = tk.Button(tab, text="Eliminar", command=lambda: eliminar_tarea(todo_listbox, tareas)) + boton_eliminar.pack(pady=5) + + # Botón para marcar tareas como completadas o no completadas + boton_marcar = tk.Button(tab, text="Marcar como hecho/no hecho", command=lambda: marcar_tarea(todo_listbox, tareas)) + boton_marcar.pack(pady=5) + + # Inicializar la lista vacía + actualizar_todo_list(todo_listbox, tareas) \ No newline at end of file diff --git a/main.py b/main.py index f767625..439b739 100644 --- a/main.py +++ b/main.py @@ -17,6 +17,7 @@ from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg import matplotlib.pyplot as plt import random from app import graphics +from app import todo_list def update_time(status_bar): while True: @@ -130,6 +131,10 @@ for i in range(1, 6): game_frame = tk.Frame(tab) game_frame.pack(fill="both", expand=True) hilo_juego = game.HiloJuego(game_frame) + elif i == 5: + notebook.add(tab, text='To Do List', padding=4) + todo_list.crear_solapa_todo(tab) + else: notebook.add(tab, text=f"Solapa {i}", padding=4) # Añadir un Label en cada solapa para diferenciarla