'''
@Description: 测试公司软件模板
@Author: JYS
@EMAIL: 18010181191@163.COM
@Date: 2020-04-21 16:43:21
@LastEditors: JYS
@LastEditTime: 2020-07-08 18:29:39
'''
import math
import threading
import time
from PyQt5.QtCore import QTimer, QMargins, QPointF, QPoint, QDateTime
from PyQt5.QtWidgets import QApplication, QMainWindow, QToolTip
from PyQt5.QtGui import QBrush, QPen, QFont, QColor, QCursor, QPixmap
from PyQt5.QtCore import Qt
from ui.Ui_mainwindow import Ui_MainWindow as ui
from QCustomPlot2 import QCustomPlot, QCPAxisTickerText, QCPAxisTickerDateTime, QCPScatterStyle, QCPTextElement, QCPLegend, QCPItemText, QCPItemPosition, QCPItemCurve, QCPLineEnding, QCPItemTracer, QCP
class MainWindow(QMainWindow, ui):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
# 初始化一个定时器
self.timer = QTimer(self)
# 定义时间超时连接start_app
self.timer.timeout.connect(self.upadta_ui)
# 定义时间任务是一次性任务
# self.timer.setSingleShot(True)
# 启动时间任务
self.timer.start(100)
self.init_ui()
self.init_connect()
self.init_data()
def init_ui(self):
"""
初始化界面
:return:
"""
# QIntValidator 整数 QDoubleValidator 浮点数显示 (最小值,最大值)
self.setWindowTitle("曲线测试")
self.init_chart()
def init_connect(self):
"""
初始化事件连接
:return:
"""
self.start.clicked.connect(self.moni_collect)
# self.btn_readdi.clicked.connect(self.ui_read_Di)
self.chart1.mouseMove.connect(self.chart_mousemove)
self.chart2.mouseMove.connect(self.chart_mousemove)
self.chart3.mouseMove.connect(self.chart_mousemove)
self.chart4.mouseMove.connect(self.chart_mousemove)
def init_data(self):
"""
初始化数据
"""
self.x_data = []
self.y_data = []
self.y_data2 = []
self.time_data = []
def init_chart(self):
"""
初始化曲线
:return:
"""
self.inin_chart1()
self.init_chart2()
self.init_chart3()
self.init_chart4()
def inin_chart1(self):
"""
初始化曲线1
:return:
"""
# 增加曲线
graph0 = self.chart1.addGraph()
graph1 = self.chart1.addGraph()
x, y0, y1 = [], [], []
for i in range(251):
x.append(i)
y0.append(math.exp(-i / 150.0) * math.cos(i / 10.0))
y1.append(math.exp(-i / 150.0)) # exponential envelope
graph0.setData(x, y0) # 设置数据
graph1.setData(x, y1) # 设置数据
# 根据范围自动缩放曲线
# self.chart1.rescaleAxes()
"""
手动设置量程
"""
self.chart1.xAxis.setRange(0, 250)
self.chart1.yAxis.setRange(-1, 1)
self.set_chart_style(self.chart1)
self.add_trace(self.chart1)
self.chart1.plotLayout().insertRow(0)
self.chart1.plotLayout().addElement(0, 0, QCPTextElement(
self.chart1, "更改背景 添加游标", QFont("sans", 12, QFont.Bold)))
def add_trace(self, chart):
"""
添加游标
:param chart:
:return:
"""
self.tracer = QCPItemTracer(chart)
self.tracer.setGraph(chart.graph(0))
# self.tracer.setGraphKey(50)# 初始坐标点
"""
tsCircle = 3 #⚪
tsCrosshair = 2 # 大十字
tsNone = 0
tsPlus = 1 十字
tsSquare = 4 方块
"""
self.tracer.setStyle(2)
self.tracer.setVisible(0)
def set_chart_style(self, chart):
"""
设置曲线样式
:param chart: 哪个曲线控件
:return:
"""
"""
设置x,y标签
"""
chart.xAxis.setLabel("点数")
chart.yAxis.setLabel("透明度")
chart.legend.setVisible(1)
# chart.xAxis.ticker().setTickCount(5)#设置自动标签数y
# chart.yAxis.ticker().setTickCount(2) # 设置自动标签数
# 网格线
chart.xAxis.grid().setVisible(1) # 网格线可见
chart.xAxis.grid().setPen(QPen(QColor(130, 130, 130), 0, Qt.SolidLine))
chart.yAxis.grid().setPen(QPen(QColor(130, 130, 130), 0, Qt.DotLine))
# 改变背景色
# self.chart1.setBackground(QBrush(Qt.darkCyan))
# 设定右上角图形标注的字体
chart.legend.setFont(QFont("宋体", 9))
# 设置画笔
chart.graph(0).setPen(QPen(Qt.red))
# 设置画刷,曲线和X轴围成面积的颜色
chart.graph(0).setBrush(QBrush(Qt.darkCyan))
chart.graph(0).setName("曲线1")
chart.graph(1).setName("曲线2")
# 是否显示刻度线
# chart.xAxis2.setVisible(1)
# # 是否显示刻度线文本
# chart.xAxis2.setTickLabels(0)
# chart.yAxis2.setVisible(1)
# chart.yAxis2.setTickLabels(0)
chart.axisRect().setupFullAxesBox()
"""
取消上轴和右轴的 小刻度
"""
chart.xAxis2.setSubTicks(0)
chart.yAxis2.setSubTicks(0)
chart.xAxis2.setTicks(0)
chart.yAxis2.setTicks(0)
"""
iRangeDrag = 1 # 缩放拖曳
iRangeZoom = 2 # 滚轮缩放
iSelectAxes = 16 #选择区域
iSelectItems = 64 # 选择items
iSelectLegend = 32 # 选择 图例
iSelectOther = 128
iSelectPlottables = 8 # 选择曲线
相加的数值放入chart.setInteraction
"""
chart.setInteraction(55)
chart.legend.setSelectableParts(QCPLegend.spItems)
chart.selectionChangedByUser.connect(self.legnd_choose)
chart.mousePress.connect(self.reply_chart)
# 设置点的样式
# chart.graph().setScatterStyle(QCPScatterStyle(QPixmap("logo.ico")))
def reply_chart(self, event):
"""
鼠标右键 曲线自动调节大小
:return:
"""
# 如果鼠标左键 返回 ==1 左键 ==2 右键
if event.button() == 1:
return
self.sender().rescaleAxes()
chart = self.sender()
for i in range(self.sender().graphCount()):
chart.graph(i).setVisible(1)
self.sender().replot()
def legnd_choose(self, tracerorgraph=1):
"""
图例选择
:return:
"""
chart = self.sender()
self.tracer.setVisible(0)
for i in range(self.sender().graphCount()):
item = chart.legend.itemWithPlottable(chart.graph(i))
if tracerorgraph:
if item.selected():
self.tracer.setGraph(self.sender().graph(i))
self.tracer.setVisible(1)
else:
chart.graph(i).setVisible(item.selected())
def init_chart2(self):
"""
初始化第二曲线
:return:
"""
self.chart2.addGraph()
self.chart2.addGraph()
# self.set_chart_style(self.chart2)
self.chart2.legend.setVisible(1)
# 填充两线之间
self.chart2.graph(0).setChannelFillGraph(self.chart2.graph(1))
self.chart2.plotLayout().insertRow(0)
self.chart2.plotLayout().addElement(0, 0, QCPTextElement(
self.chart2, "自动更新", QFont("sans", 12, QFont.Bold)))
def init_chart3(self):
"""
初始化第三曲线
:return:
"""
self.chart3.addGraph()
self.chart3.addGraph()
没有合适的资源?快使用搜索试试~ 我知道了~
python 使用 qcustomplot 首先安装qcustomplot2
共7个文件
py:4个
pyc:2个
ui:1个
需积分: 50 29 下载量 147 浏览量
2020-07-08
18:50:24
上传
评论 2
收藏 9KB 7Z 举报
温馨提示
曲线能画静态图,能画动态图 曲线能实现十字光标 跟随曲线移动 显示 对应虚线的xy值 实现 点击图例 切换十字光标 所在曲线变更 实现 没用选中图例 就没有十字光标 可以x轴是时间更新数据 是x轴是是时间时,能显示y值 曲线可以填充 可以突出数据点显示 曲线背景可以是图片
资源推荐
资源详情
资源评论
收起资源包目录
曲线测试.7z (7个子文件)
ui
mainwindow.ui 4KB
Ui_mainwindow.py 5KB
__init__.py 0B
__pycache__
__init__.cpython-37.pyc 125B
Ui_mainwindow.cpython-37.pyc 3KB
r_rc.py 5KB
software_customplot.py 14KB
共 7 条
- 1
资源评论
linxue110
- 粉丝: 203
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功