ich möchte mit PyQt5 ein Fenster öffnen, welches Daten plotten und später Messungen durchführen soll. Nutze dafür matplotlib (code adaptiert von https://gist.github.com/pklaus/3e16982d952969eb8a9a):
Code: Alles auswählen
import sys
from PyQt5 import QtWidgets
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
import numpy as np
class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.initUI()
    def initUI(self):
        QMainWindow.__init__(self)
        self.setMinimumSize(QSize(100, 100))
        self.setWindowTitle("test")
        self.centralWidget = QWidget(self)
        self.setCentralWidget(self.centralWidget)
        self.layoutUI()
    def layoutUI(self):
        measurebtn = QPushButton('Measure', self)
        measurebtn.clicked.connect(self.showMeasurement)
    def showMeasurement(self):
        print('measure1')
        d = QDialog()
        print('measure2')
        MyDynamicPlotCanvas(self, width=8, height=4, dpi=100)
        print('measure3')
        d.setWindowModality(Qt.ApplicationModal)
        d.exec_()
class PlotCanvas(FigureCanvas):
    def __init__(self, parent=None, width=5, height=4, dpi=100):
        self.fig = Figure(figsize=(width, height), dpi=dpi)
        self.canvas = FigureCanvas(self.fig)
        self.ax1 = self.fig.add_subplot(211, facecolor=(0.94, 0.94, 0.94)) # Farbe Plotbereich
        self.fig.set_facecolor((0.94, 0.94, 0.94)) #Rahmenfarbe
        self.ax3 = self.fig.add_subplot(212, facecolor = (0.94, 0.94, 0.94))
        self.ax3.set_xticks([])
        self.ax3.set_yticks([])
        FigureCanvas.__init__(self, self.fig)
        self.setParent(parent)
        FigureCanvas.setSizePolicy(self, QSizePolicy.Expanding, QSizePolicy.Expanding)
        FigureCanvas.updateGeometry(self)
class MyDynamicPlotCanvas(PlotCanvas):
    def __init__(self, *args, **kwargs):
        PlotCanvas.__init__(self, *args, **kwargs)
        self.timer = QtCore.QTimer(self)
        self.timer.timeout.connect(self.update_figure)
        self.timer.start(100)
    def update_figure(self):
        xmin = 0
        xmax = 10
        c = 100
        l = np.array([random.random() for i in range(c)])
        x = np.arange(xmin, xmax, 10/c)
        y = np.sin(x) + l/10
        y2 = y*8
        self.ax1.cla()
        self.ax1.set_title('Amplification factor ')
        self.ax1.set_xlim(-10, 10)
        self.ax1.set_ylim(-10, 10)
        self.ax1.set_xlabel('Time (s)')
        self.ax1.set_ylabel('Signal (V)')
        self.ax1.grid(color='gray', alpha=0.5, linestyle='dashed', linewidth=0.5)
        self.ax1.plot(x, y, 'y')
        self.ax1.plot(x, y2, 'b')
if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setStyle('Fusion')
    w = MainWindow()
    w.show()
    app.exec_()
 Grüße
Markus
