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()