FinalProjectAndresGMoran/app/gestor_tareas.py

55 lines
2.1 KiB
Python

import tkinter as tk
from tkinter import ttk
import threading
import psutil
import time
class GestorTareas:
def __init__(self, frame):
self.frame = frame
# Configurar estilo para ttk.Frame
style = ttk.Style()
style.configure("Custom.TFrame", background="white")
self.frame.configure(style="Custom.TFrame")
# Título
self.title_label = ttk.Label(
self.frame, text="Administrador de Tareas", font=("Helvetica", 16, "bold"), background="white"
)
self.title_label.pack(pady=10)
# Tabla de procesos
self.processes_frame = ttk.Frame(self.frame)
self.processes_frame.pack(fill="both", expand=True)
self.processes_list = tk.Listbox(self.processes_frame, width=80, height=20)
self.processes_list.pack(side="left", fill="both", expand=True, padx=10, pady=10)
scrollbar = tk.Scrollbar(self.processes_frame, orient="vertical", command=self.processes_list.yview)
scrollbar.pack(side="right", fill="y")
self.processes_list.config(yscrollcommand=scrollbar.set)
# Botón para actualizar procesos
self.update_button = ttk.Button(
self.frame, text="Actualizar", command=self.start_updating_processes
)
self.update_button.pack(pady=10)
def start_updating_processes(self):
threading.Thread(target=self.update_processes, daemon=True).start()
def update_processes(self):
while True:
self.processes_list.delete(0, tk.END)
for proc in psutil.process_iter(attrs=['pid', 'name', 'cpu_percent', 'memory_info']):
try:
process_info = (
f"PID: {proc.info['pid']} | Nombre: {proc.info['name']} | "
f"CPU: {proc.info['cpu_percent']}% | Memoria: {proc.info['memory_info'].rss / (1024 ** 2):.2f} MB"
)
self.processes_list.insert(tk.END, process_info)
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
continue
time.sleep(5)