当前位置: 首页 > news >正文

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实现的,与大家分享了我的软件开发心得与软件代码项目结构还有我的代码片段,希望大家亲自下载体验一下软件,更希望得到大家的反馈!

在这里插入图片描述

http://www.lryc.cn/news/520353.html

相关文章:

  • .NET 9.0 的 Blazor Web App 项目中 Hash 变换(MD5、Pbkdf2) 使用备忘
  • uniapp 抖音小程序 getUserProfile:fail must be invoked by user tap gesture
  • (undone) MIT6.S081 2023 学习笔记 (Day5: LAB4 traps)
  • 前端笔记----
  • 学习华为熵减,激发组织活力
  • 9Hive数据倾斜
  • 【大数据】机器学习 -----关于data.csv数据集分析案例
  • 深入解析 C++ 类型转换
  • C++ union 联合(八股总结)
  • 聊聊AI Agent
  • scala代码打包配置(maven)
  • 慧集通(DataLinkX)iPaaS集成平台-业务建模之业务对象(二)
  • C++使用minio-cpp库在minio中创建bucket
  • 【大模型】大语言模型的数据准备:构建高质量训练数据的关键指南
  • 【解决】okhttp的java.lang.IllegalStateException: closed错误
  • TCP-IP详解卷 TCP的超时与重传
  • Linux服务器查看【可用端口号连接】的命令和方式【netstat,ss,lsof】
  • 【WPS】【WORDEXCEL】【VB】实现微软WORD自动更正的效果
  • Attention计算中的各个矩阵的维度都是如何一步步变化的?
  • 【数模学习笔记】插值算法和拟合算法
  • 探索 C++ 与 LibUSB:开启 USB 设备交互的奇幻之旅
  • 二、模型训练与优化(4):模型优化-实操
  • 3D可视化产品定制,应用于哪些行业领域?
  • Avalonia 入门笔记(零):概述
  • Unity TextMesh Pro入门
  • [论文阅读] (35)TIFS24 MEGR-APT:基于攻击表示学习的高效内存APT猎杀系统
  • 12 USART串口通讯
  • CF 368A.Sereja and Coat Rack(Java实现)
  • 清华大学、字节跳动等单位联合发布最新视觉语言动作模型RoboVLMs
  • 网络安全、Web安全、渗透测试之笔经面经总结