python3GUI--大屏可视化-XX产业大数据指挥舱(附下载地址) By:PyQt5
文章目录
- 一.前言
- 二.预览
- 三.软件开发心得
- 1.使用方法
- 2.UI设计
- 3.代码架构
- 4.项目结构
- 四.代码片段分享
- 1.图片平滑缩放组件
- 2.滚动日志组件
- 五.心得体会
大小:35.0 M,软件安装包放在了这里!
本软件未使用web相关技术,无嵌套浏览器!
一.前言
今天又来和大家分享我开发的PyQt5大屏可视化方案了,本次和大家分享一款XX产业大数据指挥舱可视化方案。
二.预览
下面我将截图展示一下本次系统的主要功能
本次软件只有一屏,下面截图为软件主界面
三.软件开发心得
1.使用方法
双击安装包,点下一步进行安装,双击打开软件即可进入软件主界面,软件默认是全屏的,大家可以按下ESC退出。
2.UI设计
本次UI采用图片+文字的方式,软件整体布局为垂直布局,内部为水平布局,通过将主体内容占比增大的方式凸出主体内容,通过绘制组件实现了组件的重写,主屏增加了盘旋的无人机,增加了软件的灵巧性,软件内部有多个模块:病虫害预警、统计数据、硬件设备、灌溉数据、日志模块…每一部分都是单独设计的,简而言之就是每个模块都可以单独调试,避免了整体测试的时间浪费。软件整体颜色采用深色背景、亮色文字的方案,更直观地凸出主体。本次软件实现为代码实现,无设计师,请读者不要和笔者询问.ui文件。
3.代码架构
源代码文件夹包含多个.py文件,每个文件的互相调用逻辑见下图
4.项目结构
以下为本项目的代码结构,主要源代码在src目录下,目录下分资源、配置、组件包。
四.代码片段分享
1.图片平滑缩放组件
软开主屏中的“太阳”就是这个组件实现的
class ImageResizerLabel(QLabel):def __init__(self, parent=None):super().__init__(parent)# Initialize scaling factors and original imageself.original_pixmap = None# Set the fixed minimum size of the label (75x75)self.min_size = 75self.max_size = 90# Set up a timer for smooth scaling effectself.timer = QTimer(self)self.timer.timeout.connect(self.resize_image)self.timer.start(30) # 30ms interval for smooth transition# Initial fixed size for the label (75x75)self.setFixedSize(self.min_size, self.min_size)# Initialize scale factor and flagself.current_size = self.min_sizeself.scaling_up = Truedef load_image(self, image_path):"""Load an image into the label"""self.original_pixmap = QPixmap(image_path)if self.original_pixmap:self.update_image_size() # Ensure image is resized to fit label sizedef update_image(self, image_path):"""Update the image data (called externally to update the image)"""if self.original_pixmap:self.original_pixmap = QPixmap(image_path)self.current_size = self.min_size # Reset to the minimum sizeself.scaling_up = True # Start scaling up againself.update_image_size() # Update the image size after the updatedef resize_image(self):"""Resize the image smoothly"""if self.original_pixmap:if self.scaling_up:self.current_size += 0.5 # Increase size gradually (0.5 units per step)if self.current_size >= self.max_size: # Reached the max size (100)self.scaling_up = False # Start scaling downelse:self.current_size -= 0.5 # Decrease size gradually (0.5 units per step)if self.current_size <= self.min_size: # Back to the original size (75)self.scaling_up = True # Start scaling up# Adjust the label size to match the current sizeself.setFixedSize(self.current_size, self.current_size)# Scale the image to fit the label sizescaled_pixmap = self.original_pixmap.scaled(self.current_size, self.current_size, Qt.KeepAspectRatio, Qt.SmoothTransformation)# Update the pixmapself.setPixmap(scaled_pixmap)def update_image_size(self):"""Update the size of the label based on the image size"""if self.original_pixmap:# Adjust the size of the image while maintaining aspect ratioscaled_pixmap = self.original_pixmap.scaled(self.current_size, self.current_size, Qt.KeepAspectRatio, Qt.SmoothTransformation)self.setPixmap(scaled_pixmap)def resizeEvent(self, event):"""Handle window resize events to resize the image proportionally"""self.update_image_size() # Update the image size whenever the widget is resizedsuper().resizeEvent(event) # Call the base class method to handle the default behavior
2.滚动日志组件
这个组件用于滚动显示日志
class ScrollingMessageWidget(QWidget):def __init__(self, parent=None, messages=[]):super().__init__(parent)self.messages = messages # 初始化中奖信息列表self.message_labels = [] # 保存所有 QLabelself.current_offset = 0 # 当前滚动偏移量self.init_ui()self.start_scrolling()def init_ui(self):"""初始化UI组件"""# 窗口设置self.setStyleSheet("background-color: transparent;")# 垂直布局self.layout = QVBoxLayout(self)self.layout.setSpacing(0)self.layout.setContentsMargins(0, 0, 0, 0)# 设置字体样式font = QFont("Arial", 7, QFont.Bold)font.setBold(True)# 创建 QLabel 并添加到布局中self.create_labels(font)def create_labels(self, font):"""根据当前消息列表创建 QLabel"""# 清空原有标签for label in self.message_labels:self.layout.removeWidget(label)label.deleteLater()self.message_labels.clear()# 创建新的标签for message in self.messages:label = QLabel(message, self)label.setAlignment(Qt.AlignCenter)label.setFont(font)label.setStyleSheet("color: rgb(201,206,211);")self.layout.addWidget(label)self.message_labels.append(label)# 首尾相接:复制消息以实现循环效果for message in self.messages:label = QLabel(message, self)label.setAlignment(Qt.AlignCenter)label.setFont(font)label.setStyleSheet("color: rgb(201,206,211);")self.layout.addWidget(label)self.message_labels.append(label)def start_scrolling(self):"""启动滚动定时器"""self.timer = QTimer(self)self.timer.timeout.connect(self.scroll)self.timer.start(10) # 每 5 毫秒更新一次def scroll(self):"""滚动消息"""# 滚动偏移量递增self.current_offset += 1# 检查是否需要重置偏移量if self.current_offset >= self.message_labels[0].height():self.current_offset = 0# 将第一个 QLabel 移动到最后label = self.message_labels.pop(0)self.layout.removeWidget(label)self.layout.addWidget(label)self.message_labels.append(label)# 更新每个 QLabel 的位置for i, label in enumerate(self.message_labels):label.move(0, (i - 1) * label.height() - self.current_offset)def update_messages(self, new_messages):"""更新中奖信息并刷新显示:param new_messages: 新的中奖信息列表"""self.messages = new_messagesself.current_offset = 0 # 重置滚动偏移量self.create_labels(QFont("微软雅黑", 7, QFont.Bold)) # 重新创建标签
五.心得体会
本次和大家分享了我的大屏可视化方案,软件完全是使用PyQt5实现的,与大家分享了我的软件开发心得与软件代码项目结构还有我的代码片段,希望大家亲自下载体验一下软件,更希望得到大家的反馈!
相关文章:
python3GUI--大屏可视化-XX产业大数据指挥舱(附下载地址) By:PyQt5
文章目录 一.前言二.预览三.软件开发心得1.使用方法2.UI设计3.代码架构4.项目结构 四.代码片段分享1.图片平滑缩放组件2.滚动日志组件 五.心得体会 大小:35.0 M,软件安装包放在了这里! 本软件未…...
PHP 循环控制结构深度剖析:从基础到实战应用
PHP 循环控制结构深度剖析:从基础到实战应用 PHP提供了多种控制结构,其中循环控制结构是最常见的结构之一。它们使得我们能够高效地重复执行一段代码,直到满足某个条件为止。本文将从PHP循环的基础知识出发,逐步分析其在实际项目…...
【数据库】二、关系数据库
文章目录 二、关系数据库1 关系2 关系数据库3 完整性约束4 关系运算 二、关系数据库 1 关系 域:一组具有相同数据类型的值的集合。 笛卡尔积:所有域(域可相同)中所有取值的组合 例如:D1{1,2,3},D2{A,b}&…...
【cuda学习日记】2.2 使用2维网络(grid)和2维块(block)对矩阵进行求和
在2.0中进行了用一维网格和块对一维向量进行了求和。 在2.1中例化了二维的网格和块。 接下来进行2维网络(grid)和2维块(block)对矩阵进行求和。 #include <stdio.h> #include <stdlib.h> #include <time.h> #i…...
【13】制作镜像以及重启实例
制作镜像 k8s集群 有两个镜像需要制作,一个是master节点,一个是node节点。 在master节点上成功部署了k8s的控制平面,在node节点上部署了worker节点的配置,不知道打包镜像重启之后集群的状态是什么样的。 确认集群在运行&#…...
省级-农业科技创新(农业科技专利)数据(2010-2022年)-社科数据
省级-农业科技创新(农业科技专利)数据(2010-2022年)-社科数据https://download.csdn.net/download/paofuluolijiang/90028570 https://download.csdn.net/download/paofuluolijiang/90028570 数据 年份、省份、农业科技专利数量…...
Vue2+OpenLayers接入天地图API实现搜索定位和点击获取经纬度及地址功能(提供Gitee源码)
目录 一、案例截图 二、安装OpenLayers库 三、安装Element-UI 四、完整代码 五、天地图地名搜索API文档 六、Gitee源码 一、案例截图 输入框搜索需要查询的大概地址,可以获取到经纬度和地址信息。 二、安装OpenLayers库 npm install ol 三、安装Element-UI…...
CrossFormer实战:使用CrossFormer实现图像分类任务(一)
摘要 CrossFormer是一种新型的视觉Transformer架构,旨在通过引入跨尺度注意力机制来提升计算机视觉任务的性能。该模型特别关注不同尺度特征之间的交互,解决了现有视觉Transformer在处理多尺度特征时的不足。 研究背景 在计算机视觉中,特征…...
性能测试工具Jmeter中的FTP脚本开发
FTP文件传输协议是TCP/IP协议组织中的常用协议之一,主要用在internet上双向传输文件。FTP协议具有客户端和服务器端两个部分组成部分,具有上传与下载两种功能。Jmeter也提供了FTP请求的测试支持,实现了上传和下载功能测试。 对于上图的FTP请求…...
探索微软 M365 安全:全方位守护数字世界
在当今这个科技呈井喷式飞速发展,数字化浪潮以汹涌澎湃、锐不可当之势席卷全球的时代,企业与个人仿若置身于一片浩瀚无垠、信息奔涌的海洋之中,尽情畅享着技术革新所带来的无穷无尽便利。然而,恰如平静海面下潜藏着暗礁与汹涌暗流,网络安全问题恰似隐匿在暗处、随时可能给…...
Qt C++读写NFC标签NDEF网址URI
本示例使用的发卡器:https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.1d292c1biFgjSs&ftt&id615391857885 #include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug> #include "QLibrary" …...
[SMARTFORMS] 自定义SMARTFORMS表单页格式
在SMARTFORMS表单开发过程中,用户打印的纸张有可能不是标准的页格式,需要我自定义页格式 具体操作步骤如下所示 1.定义页格式 事务码SPAD,点击"完全管理" 点击"设备类型"中的页格式的"显示"按钮 点击创建按…...
大模型笔记:KV cache
1 为什么要使用KV cache 假设模型最终生成了四个token 对于第一个token,他的attention的计算方法为: 有了第一个token之后,生成第二个token的时候: sottmaxed表示已经逐行softmax后的结果同理,对于第三个token&…...
Android车机DIY开发之学习篇(三)替换Logo以正点原子为例
Android车机DIY开发之学习篇(三)替换Logo以正点原子为例 启动 logo 包括 u-boot 阶段 logo 内核阶段 logo /sdk/kernel-5.10 目录下替换 logo.bmp 654270 logo_kernel.bmp 654270 编译 Linux 内核...
宝塔面板 php8.0 安装 fileinfo 拓展失败
系统:Albaba Cloud Linux release 3 (OpenAnolis Editon)即 Centos 平替 异常提示: cc: fatal error: ** signal terminated program cc1 compilation terminated. make: *** [Makefile:211: libmagic/apprentice.lo] Error 1搜…...
机器学习数据预处理preprocessing
预处理方法预处理方法预处理方法BinarizerFunctionTransformerKBinsDiscretizerKernelCentererLabelBinarizerLabelEncoderMaxAbsScalerMinMaxScalerMultiLabelBinarizer sklearn.preprocessing.Binarizer 设定一个阈值(threshold),对于每个…...
网络安全 | 什么是Bot防护?
关注:CodingTechWork Bot防护介绍 随着互联网服务的普及和发展,越来越多的网站和应用遭遇了自动化攻击(Bot攻击)。Bot防护是一种安全技术,旨在检测和阻止自动化程序(即“机器人”或“bot”)对网…...
Qt学习笔记第81到90讲
第81讲 串口调试助手实现自动发送 为这个名叫“定时发送”的QCheckBox编写槽函数。 想要做出定时发送的效果,必须引入QT框架下的毫秒级定时器QTimer,查阅手册了解详情。 在widget.h内添加新的私有成员变量: QTimer *timer; 在widget类的构造…...
如何在本地部署大模型并实现接口访问( Llama3、Qwen、DeepSeek等)
如何在本地部署大模型并实现接口访问( Llama3、Qwen、DeepSeek等) 如何在本地部署大模型并实现接口访问( Llama3、Qwen、DeepSeek等)模型地址模型下载模型部署指定显卡运行app.py 运行环境requirements 调用接口代码调用 结语 如何…...
使用 Linux tracepoint、perf 和 eBPF 跟踪数据包
大家读完觉得有帮助记得关注和点赞!!! 目录 1 破局 1.1 逃离迷宫:上帝视角 1.2 网络跟踪:渴求利器 1.3 巨人肩膀:perf/eBPF 2 Perf 2.1 安装 perf 2.2 测试环境 2.3 初体验:跟踪 ping …...
给DevOps加点料:融入安全性的DevSecOps
从前,安全防护只是特定团队的责任,在开发的最后阶段才会介入。当开发周期长达数月、甚至数年时,这样做没什么问题;但是现在,这种做法现在已经行不通了。 采用 DevOps 可以有效推进快速频繁的开发周期(有时…...
MySQL视图笔记
视图的理解 ①视图是一种 虚拟表 ,本身是 不具有数据 的,占用很少的内存空间,它是 SQL 中的一个重要概念。 ②视图建立在已有表的基础上, 视图赖以建立的这些表称为基表。 ③对视图中的数据进行增加删除和修改,对应的数据表&a…...
【Ubuntu与Linux操作系统:十、C/C++编程】
第10章 C/C编程 10.1 Linux编程基础 Linux编程基础涵盖了C/C语言在Linux环境中的特点和使用方法。Linux以其高性能和开源特性成为系统编程的重要平台。 1. C语言与Linux的关系 Linux内核主要是用C语言编写的,因此学习C语言是理解Linux底层机制的必要前提。C语言的…...
豆包MarsCode:可以在线用的智能AI编程助手
大家好,今天我想和大家分享一个我最近发现的宝藏工具——豆包MarsCode。 作为一个程序员,我一直在寻找能够提高工作效率、快捷、 优化代码质量的在线编程工具。豆包MarsCode IDE,这个由字节跳动推出的智能编程助手,让我眼前一亮&…...
RabbitMQ基础(简单易懂)
RabbitMQ高级篇请看: RabbitMQ高级篇-CSDN博客 目录 什么是RabbitMQ? MQ 的核心概念 1. RabbitMQ 的核心组件 2. Exchange 的类型 3. 数据流向说明 如何安装RabbitQueue? WorkQueue(工作队列): Fa…...
UE5 使用内置组件进行网格切割
UE引擎非常强大,直接内置了网格切割功能并封装为蓝图节点,这项功能在UE4中就存在,并且无需使用Chaos等模块。那么就来学习下如何使用内置组件实现网格切割。 1.配置测试用StaticMesh 对于被切割的模型,需要配置一些参数。以UE5…...
【面试题】技术场景 6、Java 生产环境 bug 排查
生产环境 bug 排查思路 分析日志:首先通过分析日志查看是否存在错误信息,利用之前讲过的 elk 及查看日志的命令缩小查找错误范围,方便定位问题。远程 debug 适用环境:一般公司正式生产环境不允许远程 debug,多在测试环…...
macOS 安装tomcat9
macOS 安装tomcat9 URL:https://tomcat.apache.org/download-90.cgi 解压之后放到指定目录 /Users/lanren/install/tomcat-9 自己取个名字就行 给权限: ① 先进行权限修改:终端输入sudo chmod 755 /Users/lanren/install/tomcat-9/bin/…...
多线程之旅:属性及其基本操作
上次分享到了,多线程中是是如何创建的,那么接下来,小编继续分享下多线程的相关知识。 多线程中的一些基本属性。 基本属性 属性获取方法IDgetId()名称getName()状态getState()优先级getPriority()是否后台线程isDemo()是否存活isAlive()是…...
隧道网络:为数据传输开辟安全通道
什么是隧道网络? 想象一下,你正在一个陌生的城市旅行,并且想要访问家里的电脑。但是,直接连接是不可能的,因为家庭网络通常受到防火墙或路由器的保护,不允许外部直接访问。这时候,隧道网络&…...
Python爬虫-汽车之家各车系周销量榜数据
前言 本文是该专栏的第43篇,后面会持续分享python爬虫干货知识,记得关注。 在本专栏之前,笔者在文章《Python爬虫-汽车之家各车系月销量榜数据》中,有详细介绍,如何爬取“各车系车型的月销量榜单数据”的方法以及完整代码教学教程。 而本文,笔者同样以汽车之家平台为例,…...
【机器学习】时序数据与序列建模:理论与实践的全面指南
云边有个稻草人-CSDN博客 目录 云边有个稻草人-CSDN博客 引言 一、时序数据的特点与挑战 1.1 时序数据的特点 1.2 序列建模的挑战 二、传统方法概览 2.1 ARIMA 模型 2.2 Prophet 三、深度学习方法 3.1 RNN 和 LSTM 3.2 Attention 和 Transformer 3.3 自监督学习 四、…...
java.net.SocketException: Connection reset 异常原因分析和解决方法
导致此异常的原因,总结下来有三种情况: 一、服务器端偶尔出现了异常,导致连接关闭 解决方法: 采用出错重试机制 二、 服务器端和客户端使用的连接方式不一致 解决方法: 服务器端和客户端使用相同的连接方式ÿ…...
【华为OD-E卷 - 恢复数字序列 100分(python、java、c++、js、c)】
【华为OD-E卷 - 恢复数字序列 100分(python、java、c、js、c)】 题目 对于一个连续正整数组成的序列,可以将其拼接成一个字符串,再将字符串里的部分字符打乱顺序。如序列8 9 10 11 12,拼接成的字符串为89101112&…...
05、Redis持久化
Redis是在内存中操作的,我们服器关闭重启机器后,正常是之前在redis中操作的数据都不存在了,但是实际上我们开机后重新启动redis服务,一样可以看到之前操作的数据。这是为什么呢? 我们在redis的安装目录下可以看到有一…...
Python爬虫基础——selenium模块进阶(模拟鼠标操作)
主要内容包括:模拟鼠标操作。常用的鼠标操作有单击、双击、右击、长按、拖动、移动等,模拟这些操作需要用到selenium模块中的ActionChains类。该类的基本使用方法是将实例化好的WebDriver对象作参数传到该类中,实例化成一个ActionChains对象&…...
C++ macro: The # operator
C macro: The # operator 1. The # operator2. Stringizing (字符串化)References 1. The # operator The # operator converts a parameter of a function-like macro into a character string literal. #define STR(x) #xAll subsequent invocations of the macro STR woul…...
一学就废|Python基础碎片,文件读写
文件处理是指通过编程接口对文件执行诸如创建、打开、读取、写入和关闭等操作的过程。它涉及管理程序与存储设备上的文件系统之间的数据流,确保数据得到安全高效的处理。 Python 中的文件模式 打开文件时,我们必须指定我们想要的模式,该模式…...
使用MATLAB正则表达式从文本文件中提取数据
使用MATLAB正则表达式从文本文件中提取数据 使用Python正则表达式从文本文件中提取数据的代码请看这篇文章使用正则表达式读取文本数据【Python】-CSDN博客 文本数据格式 需要提取 V 后面的数据, 并绘制出曲线. index 1V 0.000000W 0.000000E_theta 0.000000UINV 0.0…...
Java基于SSM框架的在线视频教育系统小程序【附源码、文档】
博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇dz…...
Git文件夹提交错了,怎么撤销?
最近提交了一些不应该提交的文件夹到git中,现在需要移除它们,现在简单记录一下操作日志: 情况一 文件夹已经被添加到 Git,但未提交 如果文件夹已经被 git add 添加到暂存区中,但尚未提交,你可以使用以下命令将其从暂存区中移除: git rm -r …...
Unity TextMesh Pro入门
概述 TextMesh Pro是Unity提供的一组工具,用于创建2D和3D文本。与Unity的UI文本和Text Mesh系统相比,TextMesh Pro提供了更好的文本格式控制和布局管理功能。 本文介绍了TMP_Text组件和Tmp字体资产(如何创建字体资产和如何解决缺字问题),还有一些高级功…...
大疆C++开发面试题及参考答案
虚函数的作用是什么?虚函数机制是如何实现的?虚表指针在内存中的存放位置在哪里? 虚函数主要用于实现多态性。多态是面向对象编程中的一个重要概念,它允许通过基类指针或引用调用派生类中重写的函数。这样可以在运行时根据对象的实…...
极品飞车6里的赛道简介
极品飞车里有很多赛道,赛道分为前向赛道Forward、后向赛道Backward。前向赛道Forward是从A点到B点;后向赛道Backward是前向赛道的逆过程,即从B点到A点。这里介绍极品飞车6的赛道长度、中英文名称翻译、难度等级。 序号赛道英文名赛道中文名总长(km)急弯难度等级1Alpine Trai…...
Swagger学习⑰——@Link注解
介绍 Link 是 Swagger/OpenAPI 3.0 注解库中的一个注解,用于在 OpenAPI 文档中定义链接(Link)。链接是一种在 API 响应中提供相关操作或资源引用的机制,通常用于描述操作之间的关系或提供额外的操作提示。 Link 注解的作用 Link…...
Cline(原Claude Dev)开源的IDE AI插件,如何搭配OpenRouter实现cursor功能,Cline怎么使用
Cline(原Claude Dev)是一个开源的IDE AI插件,可以使用你的命令行界面和编辑器的人工智能助手。 你可以直接在VS Code编辑器进行安装。如果你使用过Cursor AI IDE的话,可以尝试最新发布的Cline3.1版本。 在OpenRouter上࿰…...
WEB前端-3.1
目录 CSS部分 什么是CSS CSS的书写方式 网页引入CSS的方式 css的颜色、大小、边线 文本和字体样式 CSS选择器 属性选择器 伪类选择器 伪元素选择器 文本样式 display属性 背景样式 精灵图、雪碧图 元素定位 绝对定位 相对定位 浮动定位 浮动 CSS部分 什么是…...
灌区闸门自动化控制系统-精准渠道量测水-灌区现代化建设
项目背景 本项目聚焦于黑龙江某一灌区的现代化改造工程,该灌区覆盖广阔,灌溉面积高达7.5万亩,地域上跨越6个乡镇及涵盖17个村庄。项目核心在于通过全面的信息化建设,强力推动节水灌溉措施的实施,旨在显著提升农业用水的…...
QT中引入OpenCV库总结(qmake方式和cmake方式)
文章目录 前言opencv环境配置一、opencv库获取的两种方式二、qmake和cmake配置2.1、 qmake2.2、cmake2.2.1、引入opencv示例 三、qt与opencv对应关系四、问题 前言 我的软件环境,写在前面 Windows10QT5.12.12VS2017OpenCV4.5.4 opencv环境配置 一、opencv库获取…...
【DAPM杂谈之三】DAPM的初始化流程
本文主要分析DAPM的设计与实现 内核的版本是:linux-5.15.164,下载链接:Linux内核下载 主要讲解有关于DAPM相关的知识,会给出一些例程并分析内核如何去实现的 /**************************************************************…...