proyecto-global-psp/vista/central_panel/view_recursos.py

68 lines
2.7 KiB
Python

# Módulo: vista/central_panel/view_recursos.py
import tkinter as tk
from tkinter import ttk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from logica.T1.graficos import crear_grafico_recursos, actualizar_historial_datos
from vista.config import *
class RecursosPanel(ttk.Frame):
"""
Panel de la pestaña Recursos (T1).
Muestra el gráfico de Matplotlib con el consumo de recursos de red.
"""
def __init__(self, parent_notebook, figure, canvas, *args, **kwargs):
super().__init__(parent_notebook, *args, **kwargs)
self.figure = figure
# Asegura que el frame del panel se expande
self.grid_rowconfigure(0, weight=1)
self.grid_columnconfigure(0, weight=1)
self.canvas = None
self.canvas_widget = None
self.grafico_frame = None
self.crear_interfaz_recursos(self)
# Estado inicial del gráfico (limpia y configura la figura)
crear_grafico_recursos(self.figure)
# ✅ DIBUJO INICIAL: Asegura que el gráfico vacío se muestre inmediatamente.
if self.canvas:
self.canvas.draw()
def crear_interfaz_recursos(self, parent_frame):
"""Prepara el Frame para contener el gráfico de Matplotlib."""
self.grafico_frame = ttk.Frame(parent_frame, style='TFrame')
# Ubicar el frame contenedor del gráfico
self.grafico_frame.grid(row=0, column=0, sticky="nsew", padx=10, pady=10)
# Asegura que el contenido del gráfico_frame se expande
self.grafico_frame.grid_rowconfigure(0, weight=1)
self.grafico_frame.grid_columnconfigure(0, weight=1)
# CREAR Y UBICAR EL CANVAS
self.canvas = FigureCanvasTkAgg(self.figure, master=self.grafico_frame)
self.canvas_widget = self.canvas.get_tk_widget()
# ✅ CRÍTICO: El widget del canvas debe expandirse para llenar el gráfico_frame
self.canvas_widget.grid(row=0, column=0, sticky="nsew")
# 📞 MÉTODOS DE CONEXIÓN (Llamados por PanelCentral)
# -------------------------------------------------------------
def actualizar_datos(self, net_in, net_out, cpu_percent, ram_percent):
"""Recibe los datos del monitor y actualiza el historial de datos en la lógica."""
# Recibe los 4 datos validados por la prueba de terminal
actualizar_historial_datos(net_in, net_out, cpu_percent, ram_percent)
def dibujar_grafico(self):
"""Llama a la función de redibujo del gráfico y fuerza la actualización del canvas."""
if self.figure:
# 1. Modifica la figura usando los datos del historial
crear_grafico_recursos(self.figure)
# 2. ✅ FORZAR EL REDIBUJADO DE TKINTER
if self.canvas:
self.canvas.draw()