ProyectoFinalPython/hilos/LanguageChart.py

57 lines
2.1 KiB
Python

import tkinter as tk
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import threading
import time
class LanguageChart:
def __init__(self, parent):
"""
Inicializa un gráfico de barras que muestra los lenguajes de programación más usados.
Args:
parent (tk.Frame): Frame donde se colocará el gráfico.
"""
self.parent = parent
# Datos iniciales de lenguajes más utilizados
self.languages = ["Python", "JavaScript", "Java", "C++", "C#"]
self.usage = [30, 25, 20, 15, 10] # Porcentajes de uso
# Crear el gráfico de barras
self.figure = Figure(figsize=(4, 3), dpi=100)
self.ax = self.figure.add_subplot(111)
self.ax.bar(self.languages, self.usage, color="skyblue")
self.ax.set_title("Lenguajes más usados")
self.ax.set_ylabel("Porcentaje de uso")
# Incrustar el gráfico en Tkinter
self.canvas = FigureCanvasTkAgg(self.figure, master=self.parent)
self.canvas.get_tk_widget().pack(fill="both", expand=True)
# Iniciar el hilo para actualizar el gráfico periódicamente
threading.Thread(target=self.update_chart, daemon=True).start()
def fetch_data(self):
"""
Simula la actualización de datos sobre el uso de lenguajes de programación.
Returns:
list: Lista de nuevos porcentajes de uso.
"""
self.usage = [value + 1 if value < 50 else value - 10 for value in self.usage]
time.sleep(5) # Simular un retraso en la actualización
def update_chart(self):
"""
Actualiza el gráfico de lenguajes de programación periódicamente en un hilo.
"""
while True:
self.fetch_data()
self.ax.clear()
self.ax.bar(self.languages, self.usage, color="skyblue")
self.ax.set_title("Lenguajes más usados")
self.ax.set_ylabel("Porcentaje de uso")
self.canvas.draw()
time.sleep(5) # Actualizar cada 5 segundos