jumeaux-numeriques/twin_plot_wx.py

78 lines
2.7 KiB
Python

import sys
import csv # Creating/parsing CSV file
import xml.etree.ElementTree as ET # Creating/parsing XML file
from twin_plot import plot_config_get_dict, plot_config_get, plot_config_get_enable, plot_nb, csv_read, plots_static # Gestion communes des graphiques (Qt, wx)
import wx # GUI wxPython
import matplotlib # Grapheur Matplotlib
from matplotlib.figure import Figure
from matplotlib.backends.backend_wxagg import (FigureCanvasWxAgg as FigureCanvas, NavigationToolbar2WxAgg as NavigationToolbar)
###############################################################################
# twin_plot_wx.py
# @title: Visualisation des données (wxPython + Matplotlib)
# @project: Blender-EduTech
# @lang: fr
# @authors: Philippe Roy <philippe.roy@ac-grenoble.fr>
# @copyright: Copyright (C) 2023 Philippe Roy
# @license: GNU GPL
###############################################################################
plot_config={}
###############################################################################
# Zone de dessin
###############################################################################
class CanvasFrame(wx.Frame):
def __init__(self):
super().__init__(None, -1, 'Visualisation des données')
# Création des zones graphique (Plots)
self.figure = Figure()
if plot_nb(plot_config) ==1: # plot_nb() : nombre de graphiques
plt = self.figure.subplots() # plot_nb() : nombre de graphiques
else:
plt = self.figure.subplots(plot_nb(plot_config), 1, sharex=True) # plot_nb() : nombre de graphiques
self.canvas = FigureCanvas(self, -1, self.figure)
# Remplissage des graphiques à partir du fichier CSV
fields, xdata, ydata = csv_read(sys.argv[1])
plots_static(plt, fields, xdata, ydata, plot_config, sys.argv[1])
self.canvas.draw()
# Implantation de la fenêtre (canvas)
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.sizer.Add(self.canvas, 1, wx.TOP | wx.LEFT | wx.EXPAND)
self.add_toolbar()
self.SetSizer(self.sizer)
self.Fit()
# Barre d'outils
def add_toolbar(self):
self.toolbar = NavigationToolbar(self.canvas)
self.toolbar.Realize()
self.sizer.Add(self.toolbar, 0, wx.LEFT | wx.EXPAND)
self.toolbar.update()
###############################################################################
# Application
###############################################################################
class App(wx.App):
def OnInit(self):
frame = CanvasFrame()
frame.Show(True)
return True
if __name__ == "__main__":
# Configuration des plots
plot_config=plot_config_get_dict()
# Fenêtre
app = App()
app.MainLoop() # StaticPlot()