Files

64 lines
2.4 KiB
Python

import pandas as pd
from PySide6.QtCore import QObject, Slot
from PySide6.QtUiTools import QUiLoader
from PySide6.QtWidgets import QWidget, QMainWindow, QApplication, QPushButton
from matplotlib.axes import Axes
from matplotlib.backends.backend_qt import FigureCanvasQT
from matplotlib.backends.backend_qtcairo import FigureCanvasQTCairo
from matplotlib.figure import Figure
class Main(QObject):
"""Classe de gestion d'affichage de diagramme dans pyside."""
area: QWidget = None
window: QMainWindow | QWidget = None
canvas: FigureCanvasQT = None
refresh_button: QPushButton = None
plot1: Axes = None
data = pd.DataFrame({"age": [25, 45, 65], "prenom": ["Pierre", "Paul", "Jacques"]})
def __init__(self):
super().__init__()
self.window = QUiLoader().load("base-window.ui")
self.area = self.window.centralWidget()
self.refresh_button = self.window.refresh_button
# Créer un canevas compatible avec Matplotlib
self.canvas = FigureCanvasQTCairo()
self.canvas.figure = self.create_figures()
self.area.layout().addWidget(self.canvas)
self.show_bar()
# Répondre à un événement sur le bouton
self.refresh_button.clicked.connect(self.on_refresh_button_click)
@Slot()
def on_refresh_button_click(self):
"""Rafraîchir le graphique."""
self.show_line()
self.canvas.draw()
def create_figures(self) -> Figure:
"""Générer une image avec un graphique."""
figure = Figure(dpi=96)
self.plot1 = figure.add_subplot(111) # 1 colonne, 1 ligne, position 1
return figure
def show_bar(self):
"""Mettre à jour le canevas avec un diagramme en barres."""
self.canvas.figure.clear() # retirer tous les graphiques
self.plot1 = self.canvas.figure.add_subplot(111) # 1 colonne, 1 ligne, position 1
self.data.plot.bar(x="prenom", y="age", ax=self.plot1, rot=0)
def show_line(self):
"""Mettre à jour le canevas avec un diagramme en lignes."""
self.canvas.figure.clear() # retirer tous les graphiques
self.plot1 = self.canvas.figure.add_subplot(111) # 1 colonne, 1 ligne, position 1
self.data.plot.line(x="prenom", y="age", ax=self.plot1, color="#ffa820")
if __name__ == '__main__':
application = QApplication()
main = Main()
main.window.show()
application.exec()