'''
@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()
![avatar](https://profile-avatar.csdnimg.cn/d370357670a2459d9d1cfc940d5648eb_linxue110.jpg!1)
linxue110
- 粉丝: 250
- 资源: 1
最新资源
- AI生成散文【指令+教程】.rar
- 模拟芯片行业:从竞争格局到产业生态深度剖析及其未来前景展望
- AI写小说指令【指令+教程】.rar
- 本地部署并运行DeepSeekPDF
- 爆款短视频脚本文案【指令+教程】.rar
- 基于CNN-LSTM-Attention的多特征输入多因变量输出回归预测模型(Matlab 2021版,含详细注释及多种结果图展示),基于CNN-LSTM-Attention的多特征输入多因变量回归预
- Matlab多维度信号处理与预测:大型设备振动信号的检测、分类与预警系统研究,Matlab多维度信号处理与预测系统:大型设备振动信号的检测、分类与安全预警策略,Matlab多维度分析,信号处理,预测
- Linux常用命令,linux常用命PDF令
- deepseek 应该怎样提问.zip
- Deepseek+高效使用指南.zip
- Deepseek不好用,是你真的不会用啊!.zip
- 当我用 DeepSeek 学习、工作和玩,惊艳!含提问攻略、使用实例和心得.zip
- DeepSeek小白使用指南,99%+的人都不知道的使用技巧(建议收藏).zip
- DeepSeek最强使用攻略,放弃复杂提示词,直接提问效果反而更好?.zip
- 零基础使用DeepSeek高效提问技巧.zip
- 让你的DeepSeek能力翻倍的使用指南.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)