PyQt6+pyqtgraph折线图绘制显示
1、实现效果
2、环境:
确认已经安装pyqtgraph
的模块,如果没有安装,使用命令安装:
pip install pyqtgraph
3、代码实现:
绘制折线函数:
import sys
import random
from PySide6.QtWidgets import QApplication, QGraphicsView, QGraphicsScene, QGraphicsItem
from PySide6.QtCore import Qt, QPointF, QRectF, QTimer
from PySide6.QtGui import QPainter, QPen, QColor, QFontclass ScrollableLineGraph(QGraphicsItem):def __init__(self, data):"""初始化线图项,设置初始显示范围和数据:param data: 要显示的数据列表"""super().__init__()self.data = dataself.current_start = 0 # 当前显示的起始索引self.bounding_rect = QRectF(0, 0, 900, 200) # 线图的边界矩形def boundingRect(self):"""返回线图的边界矩形,用于确定绘制区域:return: 矩形边界"""return self.bounding_rectdef paint(self, painter, option, widget):"""绘制线图,包括坐标轴、刻度和数据线:param painter: 绘制工具:param option: 绘制选项:param widget: 关联的窗口部件"""painter.setRenderHint(QPainter.Antialiasing) # 开启抗锯齿axis_pen = QPen(QColor(255, 255, 255)) # 坐标轴线颜色line_pen = QPen(QColor(255, 0, 0)) # 数据线颜色text_font = QFont() # 字体设置# 绘制x轴painter.setPen(axis_pen)painter.drawLine(0, 200, 900, 200)# 绘制x轴刻度和标签for i in range(0, 20, 1):x = (i - self.current_start) * 45if 0 <= x < 900:painter.drawLine(x, 200, x, 210)painter.drawText(x - 5, 220, str(i + self.current_start))# 绘制y轴painter.drawLine(0, 0, 0, 200)# 绘制y轴刻度和标签for i in range(0, 5):y = 200 - 45 * ipainter.drawLine(-5, y, 0, y)painter.drawText(-20, y - 5, str(i * 20)) #10:表示Y坐标值间隔大小# 绘制y轴刻度和标签,给每个标签添加上横向网格,网格为点状虚线for i in range(0, 5):y = 200 - 45 * i# 网格为点状虚线painter.setPen(QPen(QColor(128, 128, 128), 0.5, Qt.DashLine))# painter.drawLine(-5, y, 0, y)# painter.drawText(-20, y - 5, str(i * 10))painter.drawLine(0, y, 900, y)# 假设已经初始化了painter对象等必要的准备工作# 定义一些常量,提高代码的可读性CANVAS_HEIGHT = 200SCALE_FACTOR = 45LABEL_OFFSET = -20GRID_LINE_WIDTH = 0.5GRID_LINE_COLOR = QColor(128, 128, 128)GRID_LINE_STYLE = Qt.DashLineMAX_LABELS = 10# 新增:封装绘制网格线和刻度标签的函数def draw_scale_and_grid(painter, y_position, label):"""绘制y轴刻度和标签以及对应的横向网格线:param painter: QPainter对象,用于绘制:param y_position: y轴位置:param label: 刻度标签的文本"""try:# 绘制网格线painter.setPen(QPen(GRID_LINE_COLOR, GRID_LINE_WIDTH, GRID_LINE_STYLE))painter.drawLine(-5, y_position, 0, y_position)# 绘制刻度标签painter.drawText(-LABEL_OFFSET, y_position - 5, label)# 绘制右侧网格线painter.drawLine(0, y_position, 900, y_position)except Exception as e:print(f"Error during drawing scale and grid: {e}")# 主绘制逻辑try:for i in range(MAX_LABELS + 1): # 由于范围是从0到10,因此循环次数应为MAX_LABELS + 1y = CANVAS_HEIGHT - SCALE_FACTOR * i# 检查y位置是否在画布内,若不在则跳过if y < 0:breaklabel = str(i * 10)# draw_scale_and_grid(painter, y, label)except Exception as e:print(f"Unexpected error occurred: {e}")# 假设在这段代码的末尾,有适当的资源释放逻辑,例如painter对象的销毁等# 设置字体painter.setFont(text_font)# 绘制x轴和y轴标签painter.drawText(900, 205, "Time")painter.rotate(-90)painter.drawText(-30,10, "Value")painter.rotate(90)# 绘制数据线painter.setPen(line_pen)painter.setRenderHint(QPainter.SmoothPixmapTransform)last_point = QPointF(0, 200 - self.data[self.current_start])for i in range(self.current_start, min(self.current_start + 50, len(self.data))):x = (i - self.current_start) * 45y = 200 - self.data[i]painter.drawLine(last_point, QPointF(x, y))last_point = QPointF(x, y)
在QT Designer的Widget页面添加Graphics View,命名为graphicsView
在页面类中定义图表初始化和数据更新方法:
def GraphWidget_uiInit(self):data = []scene = QGraphicsScene(self.graphicsView)self.graphicsView.setScene(scene)self.data_graph = ScrollableLineGraph(data)scene.addItem(self.data_graph)scene.setBackgroundBrushself.graphicsView.setRenderHint(QPainter.Antialiasing)self.graphicsView.setFixedSize(960, 240)self.graphicsView.setSceneRect(0, 0, 900, 220)self.graphicsView.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)# # 设置定时器,用于动态更新数据# self.timer = QTimer(self)# self.timer.timeout.connect(self.update_data)# self.timer.start(60) # 每500毫秒触发一次def update_data(self):#随机数据# new_data = random.randint(0, 100)# self.data_graph.data.append(new_data)#将字符串数据转换成int类型的列表数据dataStr8 = "100 30 178 100 69 60 98 98 79 50 30 20 29 58 69 39 98 29 32"list_from_string8 = dataStr8.split()number_list8 = list(map(int, list_from_string8))self.data_graph.data = number_list8self.data_graph.current_start = max(0, len(self.data_graph.data) - 50)self.data_graph.update()
参考博文:https://blog.csdn.net/hyd_csdn/article/details/140644014
相关文章:
PyQt6+pyqtgraph折线图绘制显示
1、实现效果 2、环境: 确认已经安装pyqtgraph的模块,如果没有安装,使用命令安装: pip install pyqtgraph 3、代码实现: 绘制折线函数: import sys import random from PySide6.QtWidgets import QAppl…...
1-golang_org_x_crypto_bcrypt测试 --go开源库测试
1.实例测试 package mainimport ("fmt""golang.org/x/crypto/bcrypt" )func main() {password : []byte("mysecretpassword")hashedPassword, err : bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost)if err ! nil {fmt.Println(err)…...
C语言菜鸟入门·关键字·union的用法
目录 1. 简介 2. 访问成员 2.1 声明 2.2 赋值 3. 共用体的大小 4. 与typedef联合使用 5. 更多关键字 1. 简介 共用体(union)是一种数据结构,它允许在同一内存位置存储不同的数据类型,但每次只能存储其中一种类型的…...
leetcode hot100【LeetCode 238.除自身以外数组的乘积】java实现
LeetCode 238.除自身以外数组的乘积 题目描述 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 …...
【测试工具JMeter篇】JMeter性能测试入门级教程(一)出炉,测试君请各位收藏了!!!
一、前言 Apache JMeter是纯Java的开源软件,最初由Apache软件基金会的Stefano Mazzocchi开发,旨在加载测试功能行为和测量性能。可以使用JMeter进行性能测试,即针对重负载、多用户和并发流量测试Web应用程序。 我们选择JMeter原因 是否测试过…...
嵌入式驱动开发详解3(pinctrl和gpio子系统)
文章目录 前言pinctrl子系统pin引脚配置pinctrl驱动详解 gpio子系统gpio属性配置gpio子系统驱动gpio子系统API函数与gpio子系统相关的of函数 pinctrl和gpio子系统的使用设备树配置驱动层部分用户层部分 前言 如果不用pinctrl和gpio子系统的话,我们开发驱动时需要先…...
使用 OpenCV 进行视频中的行人检测
在计算机视觉领域,行人检测是一个重要的研究方向,它在视频监控、自动驾驶、人机交互等领域都有着广泛的应用。本文将介绍如何使用 OpenCV 库来实现视频中的行人检测。 环境准备 首先,我们需要安装 OpenCV 库。可以通过以下命令来安装&#…...
py文件转pyd文件的那些坑
当编译py脚本文件发给客户使用时,为了保密源代码防止反编译,可以将py文件转换为pyd文件,然后使用pyinstaller工具转换为exe应用程序,但有时测试发现,py文件可以正常运行,转换为pyd文件后却有各种错误&#…...
go interface(接口)使用
在 Go 语言中,接口(interface)是一种抽象类型,它定义了一组方法,但是不实现这些方法。接口指定了一个对象的行为,而不关心对象的具体实现。接口使得代码更加灵活和可扩展。 定义接口 接口使用 type 关键字…...
前端---HTML(一)
HTML_网络的三大基石和html普通文本标签 1.我们要访问网络,需不需要知道,网络上的东西在哪? 为什么我们写,www.baidu.com就能找到百度了呢? 我一拼ping www.baidu.com 就拼到了ip地址: [119.75.218.70]…...
unsloth vlm模型Qwen2-VL、Llama 3.2 Vision微调案例
T4卡15G显卡训练 参考: https://github.com/unslothai/unsloth 按自己显卡cuda版本安装 免费colab微调代码: Qwen2-VL: https://colab.research.google.com/drive/1whHb54GNZMrNxIsi2wm2EY_-Pvo2QyKh?usp=sharing from unsloth import FastVisionModel # NEW instead …...
云网络基础- TCP/IP 协议
文章目录 典型服务模式TCP/IP 协议设置和查看IPIP地址的分类:IP地址组成: 网络位主机位组成克隆:产生一台新的虚拟机win2008 典型服务模式 • C/S,Client/Server架构 – 由服务器提供资源或某种功能 – 客户机使用资源或功能 TCP/IP 协议 • TCP/IP是最广泛支持的通信协议集合…...
【数据分享】2001-2023年我国30米分辨率冬小麦种植分布栅格数据(免费获取)
小麦、玉米、水稻等各类农作物的种植分布数据在农业、环境、国土等很多专业都经常用到! 本次给大家分享的是我国2001-2023年逐年的30米分辨率冬小麦种植分布栅格数据!数据格式为TIFF格式,数据坐标为GCS_WGS_1984。该数据包括我国11个省份的冬…...
前端预览pdf文件流
需求 后端接口返回pdf文件流,实现新窗口预览pdf。 解决方案 把后端返回的pdf文件流转为blob路径,利用浏览器直接预览。 具体实现步骤 1、引入axios import axios from axios;2、创建预览方法(具体使用时将axios的请求路径替换为你的后端…...
【Leetcode 每日一题】146. LRU 缓存(c++)
146. LRU 缓存 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值&#x…...
Neural Magic 发布 LLM Compressor:提升大模型推理效率的新工具
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
QT简易项目 数据库可视化界面 数据库编程SQLITE QT5.12.3环境 C++实现
案例需求: 完成数据库插入,删除,修改,查看操作。 分为 插入,删除,修改,查看,查询 几个模块。 代码: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget…...
为什么DDoS防御很贵?
分布式拒绝服务攻击(DDoS攻击)是一种常见的网络安全威胁,通过大量恶意流量使目标服务器无法提供正常服务。DDoS防御是一项复杂且昂贵的服务,本文将详细探讨为什么DDoS防御如此昂贵,并提供一些实用的代码示例和解决方案…...
Spring Boot3远程调用工具RestClient
Spring Boot3.2之后web模块提供了一个新的远程调用工具RestClient,它的使用比RestTemplate方便,开箱即用,不需要单独注入到容器之中,友好的rest风格调用。下面简单的介绍一下该工具的使用。 一、写几个rest风格测试接口 RestCont…...
C51相关实验
C51相关实验 LED //功能:1.让开发板的LED全亮,2,点亮某一个LED,3.让LED3以5Hz的频率闪动#include "reg52.h"#define LED P2 sbit led1 LED^1;void main(void) {LED 0xff;//LED全灭led1 0;while(1)//保持应用程序不退出{} }LED 输出端是高…...
云服务器部署springboot项目、云服务器配置JDK、Tomcat
目录 环境准备:JDK、Tomcat 将两个文件上传刀usr/java目录下并解压: 改java相关文件里的参数 执行以下命令,打开 profile 文件 执行以下命令,读取环境变量: 查看JDK是否安装成功: 改Tomcat参数 项目…...
STM32 USART串口发送
单片机学习! 目录 前言 一、串口发送配置步骤 二、详细步骤 2.1 RCC开启USART和GPIO时钟 2.2 GPIO初始化 2.3 配置USART 2.4 开启USART 2.5 初始化总代码 三、发送数据函数设计 3.1 发送一个字节数据函数 3.2 发送一个数组函数 3.3 发送字符串函数 3.4…...
二叉树的深度搜索专题一>计算布尔二叉树的值
题目: 题目解析: 算法解析: 代码: public boolean evaluateTree(TreeNode root) {if(root.left null && root.right null) return root.val 1 ? true : false;boolean leftTree evaluateTree(root.left);boolean…...
Web day01 html css
目录 1.html: 常用标签: 1.video img p br b u i s : 2.布局标签:div span 3.表单标签: 4.表单标签项: 5.表格标签: 2.css: 1.使用样式: 2.选择器: 3.样式: 1.color: 2. …...
PHP 超级全局变量
超级全局变量是指在php任意脚本下都可以使用 PHP 超级全局变量列表: $GLOBALS:是PHP的一个超级全局变量组,在一个PHP脚本的全部作用域中都可以访问。 $_SERVER:$_SERVER 是一个PHP内置的超级全局变量,它是一个包含了诸如头信息(header)、路…...
题目:素数列
思路: 注意审题,题目中的等差素数列指公差相同且每一个元素都是素数的数列,并不是说是所有素数中一段连续且插值相同的数列,它可以是离散的。 因此,只需要暴力的遍历每一个素数,并找以其开头的所有可能等差…...
机器学习系列-决策树
文章目录 1. 决策树原理决策树的构建流程 2. 案例步骤 1:计算当前节点的熵步骤 2:对每个特征计算分裂后的熵(1) 按“天气”分裂数据集(2) 计算分裂后的加权熵 步骤 3:计算分裂依据信息增益信息增益率GINI系数(二叉树) …...
H3C OSPF 多区域实验
目录 前言 实验拓扑 实验需求 实验解析 路由器配置 测试 前言 此篇文章为 OSPF多区域试验,建议先食用OSPF单区域实验,理解实验原理 学习基本配置,再来使用此篇,效果更佳!(当然如果你已经了解原理与基…...
【Python】 深入理解Python的单元测试:用unittest和pytest进行测试驱动开发
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 单元测试是现代软件开发中的重要组成部分,通过验证代码的功能性、准确性和稳定性,提升代码质量和开发效率。本文章深入介绍Python中两种主流单元测试框架:unittest和pytest,并结合测试驱动开发(TDD)…...
微信小程序中使用iconfont的详细教程
我们知道微信小程序对包体积有很严格的要求,最大不超过2M,而图片资源对包体检有至关重要的影响,所以使用自定义的图标字体来代替大量图标图片也是提高小程序性能的重要手段,总的来说在微信小程序中使用 IconFont(图标字…...
【小白学机器学习33】 大数定律python的 pandas.Dataframe 和 pandas.Series基础内容
目录 0 总结 0.1pd.Dataframe有一个比较麻烦琐碎的地方,就是引号 和括号 0.2 pd.Dataframe关于括号的原则 0.3 分清楚几个数据类型和对应的方法的范围 0.4 几个数据结构的构造关系 list → np.array(list) → pd.Series(np.array)/pd.Dataframe 1 python 里…...
hue 4.11容器化部署,已结合Hive与Hadoop
配合《Hue 部署过程中的报错处理》食用更佳 官方配置说明页面: https://docs.gethue.com/administrator/configuration/connectors/ 官方配置hue.ini页面 https://github.com/cloudera/hue/blob/master/desktop/conf.dist/hue.ini docker部署 注意: …...
“软件定义汽车”时代 | 产线海量数据刷写解决方案
一 背景 从起初汽车概念问世时期的“机械定义汽车”,到电力出现后的“电器定义汽车”,再到电子科技迅猛发展后的“电子定义汽车”,再到如今的“软件定义汽车”,可以看出,软件在车辆中扮演着越来越重要的角色。与此同时…...
DDoS对策是什么?详细解读DDoS攻击难以防御的原因与解决方案
近年来,DDoS(分布式拒绝服务)攻击的规模和频率不断增加。根据数据显示,2023年已观测到的最大攻击流量达到700Gbps,远远超出了许多企业的防御能力。DDoS攻击导致的网站性能问题如页面加载缓慢、频繁的504错误等现象&…...
【AI系统】Tensor Core 架构演进
自 Volta 架构时代起,英伟达的 GPU 架构已经明显地转向深度学习领域的优化和创新。2017 年,Volta 架构横空出世,其中引入的张量核心(Tensor Core)设计可谓划时代之作,这一设计专门针对深度学习计算进行了优…...
React前端框架基础知识详解
React 是由 Facebook 推出的一个用于构建用户界面的 JavaScript 库,现已成为前端开发中最流行的框架之一。React 的核心理念是通过组件化的方式构建用户界面,提升代码的可维护性和复用性。本文将为大家详细介绍 React 框架的基础知识,并带你快…...
Python学习——猜拳小游戏
import random player int(input(“请输入:剪刀 0,石头 1,布2”)) computer random.randint(0,2)# print(“玩家输入的是%d,电脑输入的是%d” %(player,computer)) 用于测试 if (player 0) and (computer 0) or (player 1) a…...
Spring:AOP通知类型
我们先来回顾下AOP通知: AOP通知描述了抽取的共性功能,根据共性功能抽取的位置不同,最终运行代码时要将其加入到合理的位置 通知具体要添加到切入点的哪里? 共提供了5种通知类型: 前置通知后置通知环绕通知(重点)返回后通知(了解)抛出异常后通知(了…...
【公益接口】不定时新增接口,仅供学习
文章日期:2024.11.24 使用工具:Python 文章类型:公益接口 文章全程已做去敏处理!!! 【需要做的可联系我】 AES解密处理(直接解密即可)(crypto-js.js 标准算法ÿ…...
php 导出excel 一个单元格 多张图片
public function dumpData(){error_reporting(0); // 禁止错误信息输出ini_set(display_errors, 0); // 不显示错误$limit $this->request->post(limit, 20, intval);$offset $this->request->post(offset, 0, intval);$page floor($offset / $limit) 1 ;$wh…...
Docker3:docker基础1
欢迎来到“雪碧聊技术”CSDN博客! 在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将…...
18. 【.NET 8 实战--孢子记账--从单体到微服务】--记账模块--账本
这一篇我们来一起为账本功能编写代码。账本功能的代码很简单,就是一些简单的CURD操作。 一、需求 我们先来看一下需求: 编号需求说明1新增账本1. 账本名称不能和用户已有的账本名称重复2删除账本1. 存在收支记录的账本不能删除3修改账本1. 修改的账本…...
GPT1.0 和 GPT2.0 的联系与区别
随着自然语言处理技术的飞速发展,OpenAI 提出的 GPT 系列模型成为了生成式预训练模型的代表。作为 GPT 系列的两代代表,GPT-1 和 GPT-2 虽然在架构上有着继承关系,但在设计理念和性能上有显著的改进。本文将从模型架构、参数规模、训练数据和…...
在 Taro 中实现系统主题适配:亮/暗模式
目录 背景实现方案方案一:CSS 变量 prefers-color-scheme 媒体查询什么是 prefers-color-scheme?代码示例 方案二:通过 JavaScript 监听系统主题切换 背景 用Taro开发的微信小程序,需求是页面的UI主题想要跟随手机系统的主题适配…...
uni-app 界面TabBar中间大图标设置的两种方法
一、前言 最近写基于uni-app 写app项目的时候,底部导航栏 中间有一个固定的大图标,并且没有激活状态。这里记录下实现方案。效果如下(党组织这个图标): 方法一:midButton的使用 官方文档:ta…...
leetcode 无重复字符的最长子串
3. 无重复字符的最长子串 已解答 中等 相关标签 相关企业 提示 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串的长度。 提示: 0 < s.length < 5 * 104s 由英文字母、数字、符号和空格组成 class Solution:def lengthOfLongest…...
【C++习题】14.滑动窗口_找到字符串中所有字母异位词
文章目录 题目链接:题目描述:解法C 算法代码:图解 题目链接: 438. 找到字符串中所有字母异位词 题目描述: 解法 暴力解法: 字母排序后运用滑动窗口解题。 滑动窗口哈希表: 我们可以优化一下&am…...
matplotlib知识
问题与解决 1.module backend_interagg has no attribute FigureCanvas问题 Matplotlib 后端不兼容: matplotlib 使用的后端(如 backend_interagg)可能与当前环境不匹配或未正确加载。 在代码中显式设置一个兼容的后端,例如 TkAgg、Qt5Ag…...
如何在ubuntu上调试core dump
启用core dump 确认ulimit 状态 ulimit -c 如果输出是0,表示core dump被禁用了 运行 ulimit -c unlimited 再次运行 ulimit -c 确认输出是ulimited 设置core dump路径和文件名格式 下面命令表示设置core dump文件在当前目录(%e表示程序名&#x…...
Spring Boot教程之五:在 IntelliJ IDEA 中运行第一个 Spring Boot 应用程序
在 IntelliJ IDEA 中运行第一个 Spring Boot 应用程序 IntelliJ IDEA 是一个用 Java 编写的集成开发环境 (IDE)。它用于开发计算机软件。此 IDE 由 Jetbrains 开发,提供 Apache 2 许可社区版和商业版。它是一种智能的上下文感知 IDE,可用于在各种应用程序…...