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