# # Visualizzazione di un grafico Pyplot in un QFrame # inserito nella dialog-box PyQt principale. # ATTENZIONE mancano dispositivi per la gestione # degli inserimenti successivi! # import sys from matplotlib import pyplot from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg from matplotlib.backends.backend_qt4agg import NavigationToolbar2QTAgg from PyQt4.QtCore import * from PyQt4.QtGui import * ################################# # Classe della dialog principale. # class dBoxMain(QDialog): def __init__(self,args): # # Costruttore della dialog principale. # QDialog.__init__(self) self.setWindowTitle(args[0]) # # Costruzione dei widget. # btnApri=QPushButton("Apri",self) btnFine=QPushButton("Fine",self) self.frmDisp=QFrame(self) self.frmDisp.setMinimumWidth(640) self.frmDisp.setMinimumHeight(520) # # Amicizia Label-Controlli. # # # Definizione del layout. # grd=QGridLayout() grd.addWidget(self.frmDisp,0,0,3,1) grd.addWidget(btnApri,0,1) grd.addWidget(btnFine,1,1) grd.setColumnStretch(0,10) grd.setRowStretch(2,10) self.setLayout(grd) # # Connessione eventi-metodi (signals-slots). # self.connect(btnApri,SIGNAL("clicked(bool)"),self.showgraph) self.connect(btnFine,SIGNAL("clicked(bool)"),self.reject) # # Operazioni che devono avvenire una sola # volta al lancio dell'applicazione. # self.show() # # Procedure operative della dialog box principale. # def showgraph(self): fName=QFileDialog.getOpenFileName(self,"Apri dati", ".","File di testo (*.txt *.prn *.csv)") if fName: # # Preparo il grafico come "figure" # pyplot, in base ai dati del file. # x=[] y=[] with open(fName,"rt") as fp: for s in fp.readlines(): (xx,yy)=s.split(',') x.append(xx) y.append(yy) pyFig=pyplot.figure() pyplot.subplot(111) pyplot.plot(x,y,linewidth=2.0) pyplot.title("GRAFICO SEGNALE") pyplot.xlabel('Tempo [s]') pyplot.ylabel('Ampiezza [V]') pyplot.grid(True) # # Costruisco l'oggetto di interfaccia # PyQt - Matplotlib, passandogli la # figura pyplot da mostrare; la proprieta' # di questo oggetto viene assegnata al # QFrame che deve contenerlo. # mplGraf=FigureCanvasQTAgg(pyFig) mplGraf.setParent(self.frmDisp) # # Costruisco anche la tool-bar di # controllo di Matplotlib. "False" # come ultimo parametro permette # di eliminare la finestrina delle # coordinate variabili; la proprieta' # di questo oggetto viene assegnata # al QFrame che deve contenerlo. # ntbGraf=NavigationToolbar2QTAgg(mplGraf,self.frmDisp,False) # # Inserisco i due oggetti Matplotlib nel # QFrame, utilizzando un layout verticale, # con la tool-bar SOPRA il grafico. # viewLay=QVBoxLayout() viewLay.addWidget(ntbGraf) viewLay.addWidget(mplGraf) self.frmDisp.setLayout(viewLay) ########################## # Avvio dell'applicazione. # myApp=QApplication(sys.argv) dbm=dBoxMain(sys.argv) myApp.exec_()