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,软件安装包放在了这里! 本软件未…...
.NET 9.0 的 Blazor Web App 项目中 Hash 变换(MD5、Pbkdf2) 使用备忘
一、生成 string 对应的 MD5 码 /// <summary>/// 生成 string 对应的 MD5 码/// </summary>/// <param name"str">需要转换的字符串 string:用于登录认证时,str username 线下传递的key DateTime.Now.Ticks.ToString() …...
uniapp 抖音小程序 getUserProfile:fail must be invoked by user tap gesture
项目场景: uniapp 抖音小程序 getUserProfile:fail must be invoked by user tap gesture,在实现点击头像需要出发抖音小程序获取用户原生头像的操作中,无论如何也无法触发抖音的原生窗口! 问题描述 这个问题我找了很多博主的方法ÿ…...
(undone) MIT6.S081 2023 学习笔记 (Day5: LAB4 traps)
LAB 网页:https://pdos.csail.mit.edu/6.S081/2023/labs/traps.html 任务1:RISC-V assembly (完成) 初步看问题要求,这是一道文科题(问答题) 在你的 xv6 仓库中有一个文件 user/call.c。执行 make fs.img 会对其进行编译,并生成…...
前端笔记----
在我的理解里边一切做页面的代码都是属于前端代码。 之前用过qt框架,也是用来写界面的,但是那是用来写客户端的,而html是用来写web浏览器的,相较之下htmlcssJavaScript写出来的界面是更加漂亮的。这里就记录我自个学习后的一些笔…...
学习华为熵减,激发组织活力
目录 为什么学习华为? 学习华为什么? 一、势:顺势而为,在风口上猪都会飞起来。 二、道:就是认识和利用规律层面,文化和制度创新就是企业经营之道。 三、法:就是一套价值管理的变革方法论。…...
9Hive数据倾斜
这里写目录标题 数据倾斜问题剖析数据倾斜解决方案1. 空值引发的数据倾斜2. 不同数据类型引发的数据倾斜3. 不可拆分大文件引发的数据倾斜4. 数据膨胀引发的数据倾斜5. 表连接时引发的数据倾斜6. 确实无法减少数据量引发的数据倾斜 总结 数据倾斜问题剖析 数据倾斜是分布式系统…...
【大数据】机器学习 -----关于data.csv数据集分析案例
打开表 import pandas as pd df2 pd.read_csv("data.csv",encoding"gbk") df2.head()查看数据属性(列标题,表形状,类型,行标题,值) print("列标题:",df2.columns)Data…...
深入解析 C++ 类型转换
简介 C 类型转换是开发者必须掌握的重要技能之一, 无论是处理隐式转换还是显式转换, 理解其背后的机制与用法至关重要. 本篇博客旨在从基础到高级全面解析 C 的类型转换, 包括实际开发中的应用场景和性能分析. 自动转换 隐式类型转换 编译器可以在无需明确指示的情况下, 将一…...
C++ union 联合(八股总结)
union(联合体)允许在同一内存位置上存储不同的数据类型,所有成员共享相同的内存空间。 内存布局 由于联合体的所有成员都共享同一块内存,因此联合体的大小是其最大成员的大小。联合体的实际大小取决于其最大成员的类型和对齐要求…...
聊聊AI Agent
什么是AI Agent? AI Agent指的是一种使用人工智能技术的自主实体,它能够感知环境、做出决策,并采取行动以实现特定目标。AI Agent的核心思想是它能够独立运作,基于输入信息做出有根据的决策,并通过学习算法不断提高自…...
scala代码打包配置(maven)
目录 mavenpom.xml打包配置项(非完整版,仅含打包的内容< build>)pom.xml完整示例(需要修改参数)效果说明 maven 最主要的方式还是maven进行打包,也好进行配置项的管理 以下为pom文件(不要…...
慧集通(DataLinkX)iPaaS集成平台-业务建模之业务对象(二)
3.UI模板 当我们选择一条已经建好的业务对象点击功能按钮【UI模板】进入该业务对象的UI显示配置界面。 右边填写的是UI模板的编码以及对应名称;菜单界面配置以业务对象UI模板编码获取显示界面。 3.1【列表-按钮】 展示的对应业务对象界面的功能按钮配置࿱…...
C++使用minio-cpp库在minio中创建bucket
直接看代码 #include <iostream> #include <string>#include "miniocpp/client.h"int main() {minio::s3::BaseUrl baseUrl("base url");minio::creds::StaticProvider staticProvider("access key", "secret key");mini…...
【大模型】大语言模型的数据准备:构建高质量训练数据的关键指南
大语言模型的数据准备:构建高质量训练数据的关键指南 大语言模型(LLM, Large Language Model)的训练离不开高质量的数据,而数据准备是模型性能的基石。无论是预训练还是微调,数据的选择、清洗和标注都会直接影响模型的…...
【解决】okhttp的java.lang.IllegalStateException: closed错误
问题 Android 使用OKHttp进行后端通信,后端处理结果,反馈给前端的responseBody中其实有值,但是一直报异常,后来才发现主要是OkHttp请求回调中response.body().string()只能有效调用一次,而我使用了两次: 解…...
TCP-IP详解卷 TCP的超时与重传
TCP-IP详解卷1-21:TCP的超时与重传(Timeout and Retransmission) 一:介绍 1: 与数据链路层的ARQ协议相类似,TCP使用超时重发的重传机制。 即:TCP每发送一个报文段,就对此报文段设置…...
Linux服务器查看【可用端口号连接】的命令和方式【netstat,ss,lsof】
Linux服务器查看可用连接的端口号的命令和方式 前言:1. 使用netstat命令(netstat命令详解及使用指南)一、什么是netstat二、基本使用方法与参数解释三、输出结果字段含义:四、查找可用于SSH连接的端口示例五、部分高级用法&#x…...
【WPS】【WORDEXCEL】【VB】实现微软WORD自动更正的效果
1. 代码规范方面 添加 Option Explicit:强制要求显式声明所有变量,这样可以避免因变量名拼写错误等情况而出现难以排查的逻辑错误,提高代码的健壮性。使用 On Error GoTo 进行错误处理:通过设置错误处理机制,当代码执行…...
Attention计算中的各个矩阵的维度都是如何一步步变化的?
在Transformer模型中,各个矩阵的维度变化是一个关键的过程,涉及到输入、编码器、解码器和输出等多个阶段。以下是详细的维度变化过程: 输入阶段 输入序列:假设输入序列的长度为seq_len,每个单词或标记通过词嵌入&…...
Windows 11上运行Android应用的3大核心优势:WSA完全指南
Windows 11上运行Android应用的3大核心优势:WSA完全指南 【免费下载链接】WSA Developer-related issues and feature requests for Windows Subsystem for Android 项目地址: https://gitcode.com/gh_mirrors/ws/WSA 想在Windows电脑上直接使用你最喜欢的An…...
seo推广关键词报价需要多少预算
SEO推广关键词报价需要多少预算?详细解析与实用建议 在当今数字化营销的时代,搜索引擎优化(SEO)已经成为企业提升网站流量和品牌知名度的重要手段之一。其中,关键词优化是SEO的核心环节之一。在进行SEO推广时…...
GModPatchTool:一站式Garry‘s Mod游戏问题解决方案与优化工具
GModPatchTool:一站式Garrys Mod游戏问题解决方案与优化工具 【免费下载链接】GModPatchTool 🇬🩹🛠 Patches for Garrys Mod. Updates/Improves CEF and Fixes common launch/performance issues (esp. on Linux/Proton/macOS). …...
局域网聊天室终极解决方案:无需互联网的即时通讯工具
局域网聊天室终极解决方案:无需互联网的即时通讯工具 【免费下载链接】LAN-Chat-Room 😉基于QT开发的局域网聊天室 项目地址: https://gitcode.com/gh_mirrors/la/LAN-Chat-Room 在办公室、学校或家庭网络中,你是否曾遇到过需要快速分…...
技术赋能旧设备:OpenCore Legacy Patcher让Mac重获新生
技术赋能旧设备:OpenCore Legacy Patcher让Mac重获新生 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 当您的Mac设备被苹果官方系统升级列表排除…...
5分钟快速上手BepInEx:Unity游戏插件开发的终极解决方案
5分钟快速上手BepInEx:Unity游戏插件开发的终极解决方案 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx BepInEx(Bepis Injector Extensible)是…...
用Logisim从零搭建一个24小时数字时钟:从计数器到完整计时器的完整流程
用Logisim从零搭建24小时数字时钟:模块化设计实战指南 第一次打开Logisim时,面对空白的画布和复杂的元件库,很多数字电路初学者都会感到无从下手。本文将带你从最基础的4位二进制计数器开始,通过模块化设计思想,逐步构…...
一站式歌词提取解决方案:163MusicLyrics自动化歌词获取与处理工具
一站式歌词提取解决方案:163MusicLyrics自动化歌词获取与处理工具 【免费下载链接】163MusicLyrics 云音乐歌词获取处理工具【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 163MusicLyrics是一款专业的跨平台歌词提取…...
保姆级教程:用Python的face_recognition库,5分钟搞定人脸检测+特征点标记
零基础玩转Python人脸识别:5分钟实现智能美颜与表情分析 记得第一次接触人脸识别技术时,我盯着手机相册里自动分类的人物相册发了半天呆——这玩意儿到底是怎么认出我换了发型还长了胡子的?作为Python初学者,你可能觉得这种"…...
IndexTTS2 V23实战:用情感语音为你的视频配音,效果超真实
IndexTTS2 V23实战:用情感语音为你的视频配音,效果超真实 1. 引言:让视频配音拥有真实情感 想象一下,当你制作了一个精彩的视频,却苦于找不到合适的配音演员。或者你需要为大量视频内容快速生成配音,但又…...
