68 lines
2.7 KiB
Python
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() |