当前位置: 首页 > news >正文

python之pyQt5实例:PyQtGraph的应用

1、显示逻辑

"MainWindow": "这是主窗口,所有的其他组件都会被添加到这个窗口上。",

"centralwidget": "这是主窗口的中心部件,它包含了其他的部件。",
"pushButton": "这是一个按钮,位于主窗口的中心部件上。",
"pyqtgraph1": "这是一个GraphicsLayoutWidget对象,它是一个绘图部件,位于主窗口的中心部件上。",
"pyqtgraph2": "这是另一个GraphicsLayoutWidget对象,它也是一个绘图部件,位于主窗口的中心部件上。",
"pushButton_2": "这是另一个按钮,位于主窗口的中心部件上。",
"menubar": "这是主窗口的菜单栏。",
"statusbar": "这是主窗口的状态栏。"

from PyQt5 import QtCore, QtGui, QtWidgets
from pyqtgraph import GraphicsLayoutWidget
class Ui_MainWindow(object):def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(800, 600)self.centralwidget = QtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName("centralwidget")self.pushButton = QtWidgets.QPushButton(self.centralwidget)self.pushButton.setGeometry(QtCore.QRect(670, 140, 75, 23))self.pushButton.setObjectName("pushButton")self.pyqtgraph1 = GraphicsLayoutWidget(self.centralwidget)self.pyqtgraph1.setGeometry(QtCore.QRect(10, 10, 601, 201))self.pyqtgraph1.setObjectName("pyqtgraph1")self.pyqtgraph2 = GraphicsLayoutWidget(self.centralwidget)self.pyqtgraph2.setGeometry(QtCore.QRect(10, 220, 381, 351))self.pyqtgraph2.setObjectName("pyqtgraph2")self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)self.pushButton_2.setGeometry(QtCore.QRect(430, 380, 75, 23))self.pushButton_2.setObjectName("pushButton_2")MainWindow.setCentralWidget(self.centralwidget)self.menubar = QtWidgets.QMenuBar(MainWindow)self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))self.menubar.setObjectName("menubar")MainWindow.setMenuBar(self.menubar)self.statusbar = QtWidgets.QStatusBar(MainWindow)self.statusbar.setObjectName("statusbar")MainWindow.setStatusBar(self.statusbar)self.retranslateUi(MainWindow)QtCore.QMetaObject.connectSlotsByName(MainWindow)def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))self.pushButton.setText(_translate("MainWindow", "水平绘图"))self.pushButton_2.setText(_translate("MainWindow", "垂直绘图"))

2、业务逻辑

import sys
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QMainWindow, QApplication
import pyqtgraph as pg
from Ui_pyqtgraph_pyqt import Ui_MainWindow
import numpy as npclass MainWindow(QMainWindow, Ui_MainWindow):"""Class documentation goes here."""def __init__(self, parent=None):"""Constructor@param parent reference to the parent widget@type QWidget"""super(MainWindow, self).__init__(parent)pg.setConfigOption('background', '#f0f0f0')  # 设置背景为灰色pg.setConfigOption('foreground', 'd')  # 设置前景(包括坐标轴,线条,文本等等)为黑色。pg.setConfigOptions(antialias=True) # 使曲线看起来更光滑,而不是锯齿状# pg.setConfigOption('antialias',True) # 等价于上一句,所不同之处在于setconfigOptions可以传递多个参数进行多个设置,而setConfigOption一次只能接受一个参数进行一个设置。self.setupUi(self)@pyqtSlot()def on_pushButton_clicked(self):"""Slot documentation goes here."""self.pyqtgraph1.clear() # 清空里面的内容,否则会发生重复绘图的结果'''第一种绘图方式'''self.pyqtgraph1.addPlot(title="绘图单条线", y=np.random.normal(size=100), pen=pg.mkPen(color='b', width=2))'''第二种绘图方式'''plt2 = self.pyqtgraph1.addPlot(title='绘制多条线')plt2.plot(np.random.normal(size=150), pen=pg.mkPen(color='r', width=2), name="Red curve") # pg.mkPen的使用方法,设置线条颜色为红色,宽度为2。plt2.plot(np.random.normal(size=110) + 5, pen=(0, 255, 0), name="Green curve")plt2.plot(np.random.normal(size=120) + 10, pen=(0, 0, 255), name="Blue curve")@pyqtSlot()def on_pushButton_2_clicked(self):"""Slot documentation goes here."""'''如果没有进行第一次绘图,就开始绘图,然后做绘图标记,否则就什么都不做'''try:self.first_plot_flag # 检测是否进行过第一次绘图。except:plt = self.pyqtgraph2.addPlot(title='绘制条状图')x = np.arange(10)y1 = np.sin(x)y2 = 1.1 * np.sin(x + 1)y3 = 1.2 * np.sin(x + 2)bg1 = pg.BarGraphItem(x=x, height=y1, width=0.3, brush='r')bg2 = pg.BarGraphItem(x=x + 0.33, height=y2, width=0.3, brush='g')bg3 = pg.BarGraphItem(x=x + 0.66, height=y3, width=0.3, brush='b')plt.addItem(bg1)plt.addItem(bg2)plt.addItem(bg3)self.pyqtgraph2.nextRow()p4 = self.pyqtgraph2.addPlot(title="参数图+显示网格")x = np.cos(np.linspace(0, 2 * np.pi, 1000))y = np.sin(np.linspace(0, 4 * np.pi, 1000))p4.plot(x, y, pen=pg.mkPen(color='d', width=2))p4.showGrid(x=True, y=True) # 显示网格self.first_plot_flag = True # 第一次绘图后进行标记if __name__ == "__main__":app = QApplication(sys.argv)ui = MainWindow()ui.show()sys.exit(app.exec_())

http://www.lryc.cn/news/169167.html

相关文章:

  • Java——键盘输入的几种常见方式
  • Shell脚本中文英文多语言国际化和命令行批处理(bash sh cmd bat)中定义函数的简单写法
  • stringBuffer.append(analyze);使用这个拼接时候如何在字符串参数字符串参数整数参数字符串数组参数内容之间添加空格
  • 点云从入门到精通技术详解100篇-大范围田间场景 3D 点云语义分割研究(续)
  • Mysql详解Explain索引优化最佳实践
  • STM32H7 Azure RTOS
  • 基于LUT查找表方法的图像gamma校正算法FPGA实现,包括tb测试文件和MATLAB辅助验证
  • Function模块
  • Prometheus PromQL数据查询语言
  • 如何将转换器应用于时序模型
  • 数据结构:队列
  • AUTOSAR汽车电子嵌入式编程精讲300篇-基于AUTOSAR架构的AT控制系统研究与实现
  • 计网第五章(运输层)(四)(TCP的流量控制)
  • 【华为OD机试python】查找众数及中位数【2023 B卷|100分】
  • 阿里云无影云电脑详细介绍:价格、使用和功能优势说明
  • 【实践篇】MySQL执行计划详解
  • 二维凸包(Graham) 模板 + 详解
  • ElasticSearch(ES)简单介绍
  • OpenCV(三十五):凸包检测
  • PS 透视裁剪工具
  • 每日一个C库函数-#1-memset()
  • GraphQL基础知识与Spring for GraphQL使用教程
  • 【SA8295P 源码分析】97 - QNX AIS Camera 框架介绍 及 Camera 工作流程分析
  • 威胁的数量、复杂程度和扩散程度不断上升
  • NSSCTF web 刷题记录2
  • Linux驱动之INPUT子系统框架
  • Long类型雪花算法ID返回前端后三位精度缺失问题解决
  • 6.8-SpringIoC之循环依赖底层源码解析
  • Springboot 实践(18)Nacos配置中心参数自动刷新测试
  • uniapp引入小程序原生插件