From d205dc8395343f0e2bd26e1552a48819ee985ff7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Moran?= Date: Tue, 3 Dec 2024 18:44:54 +0100 Subject: [PATCH] First commit --- app/game.py | 0 app/scraping.py | 0 app/ui.py | 164 ++++++++++++++++++++++++++++++++++++++++++++++++ main.py | 0 4 files changed, 164 insertions(+) create mode 100644 app/game.py create mode 100644 app/scraping.py create mode 100644 app/ui.py create mode 100644 main.py diff --git a/app/game.py b/app/game.py new file mode 100644 index 0000000..e69de29 diff --git a/app/scraping.py b/app/scraping.py new file mode 100644 index 0000000..e69de29 diff --git a/app/ui.py b/app/ui.py new file mode 100644 index 0000000..2921b1b --- /dev/null +++ b/app/ui.py @@ -0,0 +1,164 @@ +import tkinter as tk +from tkinter import Menu # Importar el widget Menu +from tkinter import ttk # Importar el widget ttk +import threading +import time +import datetime +import psutil + +def update_time(status_bar): + """Función que actualiza la hora y el día de la semana en un label""" + while True: + # Obtener la fecha y hora actual + now = datetime.datetime.now() + day_of_week = now.strftime("%A") # Día de la semana + time_str = now.strftime("%H:%M:%S") # Hora en formato HH:MM:SS + date_str = now.strftime("%Y-%m-%d") # Fecha en formato YYYY-MM-DD + label_text = f"{day_of_week}, {date_str} - {time_str}" + + # Actualizar el label (debemos usar `after` para asegurarnos que se actualice en el hilo principal de Tkinter) + label_fecha_hora.after(1000, status_bar.config, {"text": label_text}) + + # Espera 1 segundo antes de actualizar de nuevo + time.sleep(1) + +def monitor_cpu_usage(label): + """Monitorea y actualiza el uso de CPU en tiempo real.""" + while True: + cpu_percent = psutil.cpu_percent(interval=1) # Obtiene el uso de CPU cada segundo + label.config(text=f"CPU: {cpu_percent}%") + time.sleep(1) + +def monitor_ram_usage(label): + """Monitorea y actualiza el uso de RAM en tiempo real.""" + while True: + memory_info = psutil.virtual_memory() + ram_percent = memory_info.percent # Porcentaje de uso de RAM + label.config(text=f"RAM: {ram_percent}%") + time.sleep(1) + + + + +# Crear la ventana principal +root = tk.Tk() +root.title("Ventana Responsive") +root.geometry("1000x700") # Tamaño inicial + +# Configurar la ventana principal para que sea responsive +root.columnconfigure(0, weight=0) # Columna izquierda, tamaño fijo +root.columnconfigure(1, weight=1) # Columna central, tamaño variable +root.columnconfigure(2, weight=0) # Columna derecha, tamaño fijo +root.rowconfigure(0, weight=1) # Fila principal, tamaño variable +root.rowconfigure(1, weight=0) # Barra de estado, tamaño fijo + +# Crear el menú superior +menu_bar = Menu(root) + +file_menu = Menu(menu_bar, tearoff=0) +file_menu.add_command(label="Nuevo") +file_menu.add_command(label="Abrir") +file_menu.add_separator() +file_menu.add_command(label="Salir", command=root.quit) + +edit_menu = Menu(menu_bar, tearoff=0) +edit_menu.add_command(label="Copiar") +edit_menu.add_command(label="Pegar") + +help_menu = Menu(menu_bar, tearoff=0) +help_menu.add_command(label="Acerca de") + +menu_bar.add_cascade(label="Archivo", menu=file_menu) +menu_bar.add_cascade(label="Editar", menu=edit_menu) +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_central = tk.Frame(root, bg="white") +frame_derecho = tk.Frame(root, bg="lightgreen", width=200) + +# Colocar los frames laterales y el central +frame_izquierdo.grid(row=0, column=0, sticky="ns") +frame_central.grid(row=0, column=1, sticky="nsew") +frame_derecho.grid(row=0, column=2, sticky="ns") + +# Configurar los tamaños fijos de los frames laterales +frame_izquierdo.grid_propagate(False) +frame_derecho.grid_propagate(False) + +# Dividir el frame central en dos partes (superior variable e inferior fija) +frame_central.rowconfigure(0, weight=1) # Parte superior, tamaño variable +frame_central.rowconfigure(1, weight=0) # Parte inferior, tamaño fijo +frame_central.columnconfigure(0, weight=1) # Ocupa toda la anchura + +# Crear subframes dentro del frame central +frame_superior = tk.Frame(frame_central, bg="lightyellow") +frame_inferior = tk.Frame(frame_central, bg="lightgray", height=100) + +# Colocar los subframes dentro del frame central +frame_superior.grid(row=0, column=0, sticky="nsew") +frame_inferior.grid(row=1, column=0, sticky="ew") + +# Fijar el tamaño de la parte inferior +frame_inferior.grid_propagate(False) + +# Crear la barra de estado +barra_estado = tk.Label(root, text="Barra de estado", bg="lightgray", anchor="w") +barra_estado.grid(row=1, column=0, columnspan=3, sticky="ew") + +# Notebook para las pestañas + +style = ttk.Style() +style.configure("CustomNotebook.TNotebook.Tab", font=("Arial", 12, "bold")) +notebook = ttk.Notebook(frame_superior, style="CustomNotebook.TNotebook") +notebook.pack(fill="both", expand=True) + + +# Crear cinco solapas +for i in range(1, 6): + tab = ttk.Frame(notebook) + + notebook.add(tab, text=f"Solapa {i}", padding=4) + # Añadir un Label en cada solapa para diferenciarla + label = ttk.Label(tab, text=f"Contenido de la Solapa {i}") + label.pack(pady=10) + +# Barra de estado +# Dividir la barra de estado en 4 labels + + +# Usar pack para alinear los labels horizontalmente + + +label_cpu_used = tk.Label(barra_estado, text="CPU: 0%", bg="green", anchor="w", width=20) +label_ram_used = tk.Label(barra_estado, text="RAM: 0%", bg="blue", anchor="w", width=20) +label_3 = tk.Label(barra_estado, text="Estado 3", bg="cyan", anchor="w", width=20) +label_4 = tk.Label(barra_estado, text="Estado 4", bg="pink", anchor="w", width=20) +label_fecha_hora = tk.Label(barra_estado, text="Hilo fecha-hora", font=("Helvetica", 14), bd=1, fg="blue", relief="sunken", anchor="w", width=20, padx=10) + +label_cpu_used.pack(side="left", fill="x", expand=True) +label_ram_used.pack(side="left", fill="x", expand=True) +label_3.pack(side="left", fill="x", expand=True) +label_4.pack(side="left", fill="x", expand=True) +label_fecha_hora.pack(side="right", fill="x", expand=True) +# barra_estado.grid(row=1, column=0, columnspan=3, sticky="ew") + + +update_thread = threading.Thread(target=update_time, args=(label_fecha_hora,)) +update_thread.daemon = True # Hacemos el hilo un demonio para que termine con la app +update_thread.start() + +# Iniciar el hilo para actualizar el uso de CPU +thread_cpu_monitor = threading.Thread(target=monitor_cpu_usage, args=(label_cpu_used,)) +thread_cpu_monitor.daemon = True # Aseguramos que el hilo termine con la app +thread_cpu_monitor.start() + +thread_ram_monitor = threading.Thread(target=monitor_ram_usage, args=(label_ram_used,)) +thread_ram_monitor.daemon = True +thread_ram_monitor.start() + + +# Ejecución de la aplicación +root.mainloop() \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..e69de29