64 lines
2.4 KiB
Python
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()
|