From dc26c1f5e626f491e2abf819096ebc1f7a1aa662 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Moran?= Date: Fri, 13 Dec 2024 00:02:10 +0100 Subject: [PATCH] Cambios de ultima hora --- app/graphics.py | 11 +++++----- app/todo_list.py | 51 +++++++++++++++++++++++++++-------------------- image.png | Bin 0 -> 3558 bytes 3 files changed, 34 insertions(+), 28 deletions(-) create mode 100644 image.png diff --git a/app/graphics.py b/app/graphics.py index b563042..f49e994 100644 --- a/app/graphics.py +++ b/app/graphics.py @@ -4,7 +4,7 @@ import threading import random import time -running = True # Variable global para controlar el estado de los hilos +running = True def actualizar_grafico_criptomonedas_api(canvas, ax): @@ -12,7 +12,7 @@ def actualizar_grafico_criptomonedas_api(canvas, ax): while True: if not running: # Verifica si el programa está en ejecución break - if not canvas.get_tk_widget().winfo_exists(): # Verifica si el Canvas sigue existiendo + if not canvas.get_tk_widget().winfo_exists(): break try: # Solicitar datos de precios de criptomonedas @@ -42,13 +42,12 @@ def actualizar_grafico_ibex_api(canvas, ax): while True: if not running: # Verifica si el programa está en ejecución break - if not canvas.get_tk_widget().winfo_exists(): # Verifica si el Canvas sigue existiendo + if not canvas.get_tk_widget().winfo_exists(): break try: # Obtener datos históricos de IBEX 35 data = yf.Ticker("^IBEX").history(period="1d", interval="5m") - # Extraer los precios de cierre close_prices = data['Close'].values # Actualizar el gráfico con los datos reales @@ -59,13 +58,13 @@ def actualizar_grafico_ibex_api(canvas, ax): canvas.draw() except Exception as e: print(f"Error al obtener datos del IBEX: {e}") - time.sleep(60) # Actualizar cada 5 minutos + time.sleep(60) def iniciar_hilos(canvas_cripto, ax_cripto, canvas_ibex, ax_ibex): """Inicia los hilos de actualización de gráficos.""" global running - running = True # Asegurar que los hilos pueden ejecutarse + running = True # Hilo para criptomonedas thread_criptomonedas = threading.Thread( diff --git a/app/todo_list.py b/app/todo_list.py index 08155de..30a54d1 100644 --- a/app/todo_list.py +++ b/app/todo_list.py @@ -1,5 +1,6 @@ import tkinter as tk import threading +import time def actualizar_todo_list(todo_listbox, tareas): """Actualizar el contenido del ListBox con las tareas actuales.""" @@ -9,35 +10,41 @@ def actualizar_todo_list(todo_listbox, tareas): 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) + """Agregar una nueva tarea a la lista en un hilo separado.""" + def tarea_hilo(): + nueva_tarea = entry.get() + if nueva_tarea.strip(): + tareas.append((nueva_tarea, False)) # Agregar tarea como no completada + todo_listbox.after(0, actualizar_todo_list, todo_listbox, tareas) + entry.delete(0, tk.END) + threading.Thread(target=tarea_hilo).start() 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) + """Eliminar la tarea seleccionada de la lista en un hilo separado.""" + def tarea_hilo(): + seleccion = todo_listbox.curselection() + if seleccion: + indice = seleccion[0] + tareas.pop(indice) + todo_listbox.after(0, actualizar_todo_list, todo_listbox, tareas) + threading.Thread(target=tarea_hilo).start() 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) + """Marcar la tarea seleccionada como completada o no completada en un hilo separado.""" + def tarea_hilo(): + seleccion = todo_listbox.curselection() + if seleccion: + indice = seleccion[0] + tarea, completada = tareas[indice] + tareas[indice] = (tarea, not completada) # Alternar el estado de completada + todo_listbox.after(0, actualizar_todo_list, todo_listbox, tareas) + threading.Thread(target=tarea_hilo).start() 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 + tareas = [] - # Entry para agregar nuevas tareas + # Entrada para agregar nuevas tareas entry = tk.Entry(tab, font=("Arial", 12)) entry.pack(pady=10, padx=10, fill="x") @@ -58,4 +65,4 @@ def crear_solapa_todo(tab): boton_marcar.pack(pady=5) # Inicializar la lista vacía - actualizar_todo_list(todo_listbox, tareas) \ No newline at end of file + actualizar_todo_list(todo_listbox, tareas) diff --git a/image.png b/image.png new file mode 100644 index 0000000000000000000000000000000000000000..2a02655e5315aa82beb2a7af0fbde322cb53153b GIT binary patch literal 3558 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 literal 0 HcmV?d00001