import os import platform import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * import numpy as np import matplotlib matplotlib.use("Qt5Agg") from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.figure import Figure #注意不是pyplot下的那个figure class myMainWindow(QMainWindow): def __init__(self, parent=None): super().__init__(parent) self.setWindowTitle("Logistic Map: x:=rx(1-x)") #添加工具栏 self.labelX = QLabel(‘x1: ‘) self.labelR = QLabel(‘ r: ‘) self.spinX = QDoubleSpinBox() self.spinX.setRange(0, 1) self.spinX.setValue(0.02) self.spinX.setSingleStep(0.01) self.spinR = QDoubleSpinBox() self.spinR.setRange(1.0, 6.0) self.spinR.setValue(2.0) self.spinR.setSingleStep(0.02) s = QSpacerItem(20, 20, QSizePolicy.Expanding, QSizePolicy.Expanding) self.layout = QHBoxLayout() self.layout.addWidget(self.labelX) self.layout.addWidget(self.spinX) self.layout.addWidget(self.labelR) self.layout.addWidget(self.spinR) self.layout.addSpacerItem(s) self.containWidget = QWidget() self.containWidget.setLayout(self.layout) self.toolDockWidget = QDockWidget("Input:", self) self.toolDockWidget.setAllowedAreas(Qt.BottomDockWidgetArea) self.toolDockWidget.setWidget(self.containWidget) self.addDockWidget(Qt.BottomDockWidgetArea, self.toolDockWidget) self.spinX.valueChanged.connect(self.updateUi) self.spinR.valueChanged.connect(self.updateUi) #绘图 self.fig = Figure(figsize=(12, 6), dpi=100) self.figureCanvas = FigureCanvas(self.fig) self.graphicscene = QGraphicsScene() self.graphicscene.addWidget(self.figureCanvas) self.graphicview = QGraphicsView() self.graphicview.setScene(self.graphicscene) self.setCentralWidget(self.graphicview) self.updateUi() def generateData(self, x1, r): arr = [x1] x = x1 for i in range(1, 99): x = r * x * (1-x) arr.append(x) d = np.array(arr) return d def updateUi(self): #计算 self.x1 = self.spinX.value() self.r = self.spinR.value() self.data = self.generateData(self.x1, self.r) #显示 self.fig.clf() self.ax = self.fig.add_subplot(1,1,1) self.ax.plot(self.data) self.figureCanvas.draw() app = QApplication(sys.argv) form = myMainWindow() form.setMinimumSize(1500, 800) form.show() app.exec_()
python programming GUI综合实战(在GUI上画图)
原文:https://www.cnblogs.com/caiyishuai/p/10933523.html