zoukankan      html  css  js  c++  java
  • python programming GUI综合实战(在GUI上画图)

    python programming GUI综合实战(在GUI上画图)

    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_()

  • 相关阅读:
    dubbo 学习
    JSTL 实现 为Select赋多个值
    Spring MVC 单元测试Demo
    IDEA git commit push revert
    高并发处理
    Redis Expire TTL命令
    Redis 原子操作INCR
    Redis 安装
    慢日志查询
    angularJs 处理多选框(checkbox)
  • 原文地址:https://www.cnblogs.com/caiyishuai/p/13270759.html
Copyright © 2011-2022 走看看