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

python3GUI--大屏可视化-传染病督导平台 By:PyQt5

文章目录

  • 一.前言
  • 二.预览
  • 三.软件组成&开发心得
    • 1.样式&使用方法
    • 2.左侧表格实现
    • 3.设计
    • 4.学习
    • 5.体验效果
  • 四.代码分享
    • 1.环形渐变进度组件
    • 2.自定义图片的背景组件
  • 五.总结


大小:60.9 M,软件安装包放在了这里!

请添加图片描述

一.前言

本次仍然给大家带来我使用Pyqt5开发的大屏可视化解决方案,我提供的可视化方案均不依赖于浏览器,所有组件都是QWidget及其子类,大家可以放心学习交流!

二.预览

下面我将截图展示一下本次系统的主要功能
本次软件只有一屏,下面截图为软件主界面
在这里插入图片描述
贴一张动图展示启动后的效果
请添加图片描述

三.软件组成&开发心得

1.样式&使用方法

大屏可视化方案参考了web的前端样式,通过借鉴其可视化方案使用Pyqt5绘制QWidgets的方式实现同样的效果。本软件启动后会自动最大化,软件不包含标题栏,通过按下键盘上的ESC退出。

2.左侧表格实现

本次的可视化二维表格不是使用的QTableWidget 而是使用的网格布局,通过加入水平分割线将数据与数据、表头与数据分割开来,形成表头和数据对应的表格,也算是笔者的一个创新尝试。

3.设计

软件整体是垂直布局,是最上方的头部与下方内容区水平布局,下方的水平布局包括三个QWidget,设置了水平布局,水平比例为1:2:1,尽可能将我们的可视化效果占比达到最大,每个内容区包括2~3个内部组件,在代码上使用不同的类,来区分不同的区域。

4.学习

在本次代码开发撰写当中,学习到了geojson数据的使用,细心的读者可以发现中间的地图是有交互效果的,具体来说是:把鼠标放置到对应的区,鼠标所在的区域会变色,这里说下地图的绘制,数据来源是https://geojson.hxkj.vip/,大家可以在这里根据城市、地区名字or区号下载对应的geojson,这样我们的数据就准备好了,然后进行地图的绘制,我们选择“重写PaintEvent”的方式按照经纬度绘制地图,具体来说可以通过传入不同的geojson数据来绘制不同的地图,比如下面的北京地图:

在这里插入图片描述

5.体验效果

一款成品的大屏可视化方案是存在交互效果的,我们的效果具体体现在:

  • 启动LCD数据变化动画

  • 启动条形图数据变化动画

  • 地图鼠标交互效果

  • 地球外围点、线旋转效果

  • 整体颜色风格效果

  • 实时时间更新

四.代码分享

这里和大家分享单个组件代码

1.环形渐变进度组件

class ProgressCircle(QWidget):"""进度值圆环组件"""def __init__(self, p=None):super().__init__(p)self.ui_init()self.ani_init()def ui_init(self):self._progress = 0  # 当前进度,初始化为0def ani_init(self):# 创建属性动画self.animation = QPropertyAnimation(self, b"progress")self.animation.start()  # 启动动画# 创建 progress 属性def get_progress(self):return self._progressdef set_progress(self, value):self._progress = valueself.update()  # 每次更新 progress 时触发绘制progress = pyqtProperty(float, get_progress, set_progress)  # 定义 progress 属性def set_target_progress(self, target_progress):"""外部设置目标进度值并触发动画"""# 创建新的属性动画self.animation.stop()  # 停止当前动画self.animation = QPropertyAnimation(self, b"progress")self.animation.setDuration(800)  # 设置动画时长self.animation.setStartValue(self._progress)  # 设置动画起始值为当前进度self.animation.setEndValue(target_progress)  # 设置动画结束值为目标进度self.animation.start()  # 启动新的动画def resizeEvent(self, event):# 根据窗口大小动态调整圆环的大小,并保证边缘有 5px 的间隙margin = 5  # 设置边缘的间隙为 5pxself.circle_diameter = min(self.width(), self.height()) - 2 * margin  # 留出 5px 边距self.circle_center = self.rect().center()  # 获取窗口中心点def paintEvent(self, event):painter = QPainter(self)painter.setRenderHint(QPainter.Antialiasing)# 计算圆环的位置和大小radius = self.circle_diameter / 2rect = QRectF(self.circle_center.x() - radius, self.circle_center.y() - radius, self.circle_diameter,self.circle_diameter)start_angle = 90 * 16  # 从正上方开始(以16进制计算角度)span_angle = -(360 * self._progress / 100) * 16  # 根据当前进度百分比调整角度# 绘制未划过的部分(背景)pen = QPen(QColor(26, 68, 112), 10)  # 未划过部分的颜色painter.setPen(pen)painter.drawArc(rect, start_angle, 360 * 16)  # 完整的圆环背景# 渐变色设置(已划过的部分)gradient = QLinearGradient(self.circle_center.x(), self.circle_center.y(), self.circle_center.x() + radius,self.circle_center.y())gradient.setColorAt(0, QColor(3, 202, 251))  # 渐变色的起始颜色gradient.setColorAt(1, QColor(51, 127, 237))  # 渐变色的结束颜色# 设置渐变的画笔pen = QPen(gradient, 6)  # 使用渐变色绘制圆环painter.setPen(pen)painter.drawArc(rect, int(start_angle), int(span_angle))  # 进度部分# 绘制文本(进度百分比)painter.setPen(QColor(13, 132, 242))  # 内层文字颜色设置为 rgb(13, 132, 242)painter.setFont(QFont("微软雅黑", 16))text = f"{int(self._progress)}%"  # 显示整数进度text_rect = self.rect()painter.drawText(text_rect, Qt.AlignCenter, text)

2.自定义图片的背景组件

class BGWidgetBase(QWidget):"""自定义背景的组件"""def __init__(self, p=None, bg_pic=""):super(BGWidgetBase, self).__init__(p)self.bg_pic = bg_picself.setAttribute(Qt.WA_TranslucentBackground, True)def set_bg_pic(self, bg_pic):self.bg_pic = bg_picself.repaint()self.update()def paintEvent(self, event):super(BGWidgetBase, self).paintEvent(event)painter = QPainter(self)painter.setRenderHint(QPainter.Antialiasing, True)painter.setRenderHint(QPainter.SmoothPixmapTransform, True)pixmap = QPixmap(self.bg_pic)painter.drawPixmap(QRect(0, 0, self.width(), self.height()), pixmap)painter.end()

五.总结

本次和大家分享了我开发的大屏可视化-传染病监督平台,这是一款我比较满意的作品,和大家分享了部分设计细节以及代码,大家能给我点个赞么~
在这里插入图片描述

相关文章:

python3GUI--大屏可视化-传染病督导平台 By:PyQt5

文章目录 一.前言二.预览三.软件组成&开发心得1.样式&使用方法2.左侧表格实现3.设计4.学习5.体验效果 四.代码分享1.环形渐变进度组件2.自定义图片的背景组件 五.总结 大小:60.9 M,软件…...

如何选择适合的证件照制作软件,让您的照片制作更轻松

在当今数字化的时代,制作证件照不再需要专门前往照相馆。选择一款合适的证件照制作软件,您可以在家中轻松完成标准证件照的拍摄与制作。然而,面对市面上琳琅满目的软件,找到最适合您需求的软件并不简单。本文将为您详细介绍选择证…...

工作效率提升:使用Anaconda Prompt 创建虚拟环境总结

目录 完整顺序命令流程(直接照着改就行)详细步骤解析(想要详细解析的看过来)1. 创建一个用于存储 Conda 环境的目录(可选)2. 创建新的 Conda 虚拟环境并指定路径3. 激活新创建的环境4. 安装 Jupyter Notebo…...

Python自动化实战 —— 使用Selenium进行Web自动化

为了完成一项重复的任务,你需要在网站上进行大量的点击和操作,每次都要浪费大量的时间和精力。Python的Selenium库就可以自动化完成这些任务。 在本篇文章中,我们将会介绍如何使用Python的Selenium库进行Web自动化,以及如何将它应…...

【前端】【HTML】入门基础知识

参考视频&#xff1a;【狂神说Java】HTML5完整教学通俗易懂_哔哩哔哩_bilibili 一、基本结构 二、基本标签 <h1>&#xff1a;一级标题&#xff0c;通常用于页面的主标题&#xff0c;字体较大且醒目。 <h2>&#xff1a;二级标题&#xff0c;用于副标题或主要章节标…...

PHP获取局域网ip(192.168)

有时候&#xff0c;程序中&#xff0c;需要获取本机内网ip的情况&#xff0c;经过各种资料查找&#xff0c;最终确定一下代码&#xff1a; //获取内网ipfunction getLocalIP() {exec("ipconfig /all",$arr);$res mb_convert_encoding($arr, UTF-8, GBK);$ip ;fore…...

点击底部的 tabBar 属于 wx.switchTab 跳转方式,目标页面的 onLoad 不会触发(除非是第一次加载)

文章目录 1. tabBar 的跳转方式2. tabBar 跳转的特点3. 你的配置分析4. 生命周期触发情况5. 总结 很多人不明白什么是第一次加载&#xff0c;两种情况讨论&#xff0c;第一种情况假设我是开发者&#xff0c;第一次加载就是指点击微信开发者工具上边的编译按钮&#xff0c;每点击…...

基于PLC的酒店热水供应控制系统设计

摘 要 酒店的热水量需求比较大,热水加热消耗能源比较多,为了实现清洁能源加热实现热水供应,系统设计以太阳能作为主要能源来源,以电加热作为辅助能源来源进行系统的设计.通过集热器、储水箱、循环泵等设备组成酒店热水供水系统。通过控制温度传感器的信号&#xff0c;实现恒温…...

博客内所有项目均可在面包多平台进行购买

本人已入住面包多平台&#xff1a;我的 - 面包多 已有资料&#xff1a;...

《Mcal》--MCU模块

一、MCU模块的主要功能 控制系统时钟的产生。控制系统通用模块&#xff0c;该模块会涉及到Adc、Ftm等外设的配置。控制外设时钟。控制MCU运行的模式。初始化定义RAM Section。 比较重要的是时钟的配置。 二、系统时钟的配置 1、芯片时钟树 要想弄明白时钟配置&#xff0c;需…...

C语言:枚举类型

一、枚举类型的声明 枚举顾名思义就是一一列举。我们可以把可能的取值一一列举。比如我们现实生活中&#xff1a; 星期一到星期日是有限的7天&#xff0c;可以一一列举 &#xff1b;性别有&#xff1a;男、女、保密&#xff0c;也可以一一列举 &#xff1b;月份有12个月&#x…...

spring boot 多数据源集成mysql、postgresql、phoenix、doris等

如何搭建多数据源项目只要以下简单几步; 一. 创建核心在config.datasource文件夹里 二. 引入相对应的jar包 三. 创建数据库连接配置 四. 写逻辑代码进行验证 1.DataSource package com.irootech.config.datasource;import java.lang.annotation.*;Target({ElementType.MET…...

USB基础 -- USB 控制传输(Control Transfer)的重传机制

USB 控制传输&#xff08;Control Transfer&#xff09;的重传机制 1. 控制传输的事务结构 控制传输分为三个阶段&#xff0c;每个阶段都有自己的事务&#xff0c;并可能触发重传机制&#xff1a; 设置阶段&#xff08;Setup Stage&#xff09;&#xff1a;主机发送 8 字节的…...

云计算基础,虚拟化原理

文章目录 一、虚拟化1.1 什么是虚拟化1.2 虚拟化类型 二 、存储虚拟化2.1 存储指标2.2 存储类型2.3 存储协议2.4 RAID 三、内存 i/O虚拟化3.1 内存虚拟化基本概念地址空间转换原理内存共享与隔离原理 3.2 I/O 虚拟化基本概念模拟&#xff08;Emulation&#xff09;方式半虚拟化…...

浮点数在C语言开发中为什么不精确?

在C语言开发中&#xff0c;浮点数的精度问题是一个常见的陷阱&#xff0c;尤其是对于刚接触编程的开发者来说&#xff0c;可能会对浮点数的行为感到困惑。为什么0.1 0.2不等于0.3&#xff1f;为什么浮点数计算会出现微小误差&#xff1f;本文将从计算机底层原理出发&#xff0…...

ChatGPT网络错误如何解决

在当今的信息化社会&#xff0c;网络技术已无处不在。无论是日常生活中的在线购物&#xff0c;还是工作中的远程会议&#xff0c;网络的稳定性和可靠性成为了我们无时无刻不在关注的重要问题。而在智能技术的快速发展中&#xff0c;像ChatGPT这样的人工智能模型&#xff0c;因其…...

Vue3初学之插槽(slot)使用

在 Vue 3 中&#xff0c;插槽&#xff08;Slots&#xff09;是一种强大的内容分发机制&#xff0c;允许你在组件中定义可替换的内容区域&#xff0c;从而使组件更加通用和灵活。以下是 Vue 3 中插槽的几种常见用法&#xff1a; 默认插槽 默认插槽是最基本的插槽类型&#xff0…...

使用PVE快速创建虚拟机集群并搭建docker环境

安装Linux系统 这里以安装龙蜥操作系统AnolisOS8.9为例加以说明。 通过PVE后台上传操作系统ISO镜像。 然后在PVE上【创建虚拟机】&#xff0c;选定上传的龙蜥操作系统镜像进行系统安装。 注意&#xff1a;在安装过程中&#xff0c;要设定语言、时区、超管用户root的密码、普…...

带格式 pdf 翻译

支持 openAI 接口&#xff0c;国内 deepseek 接口兼容 openAI 接口&#xff0c; deepseek api 又非常便宜 https://pdf2zh.com/ https://github.com/Byaidu/PDFMathTranslate...

【C++】C++11(一)

目录 一、C11简介二、统一的列表初始化2.1 &#xff5b;&#xff5d;初始化2.2 std::initializer_list 三、声明3.1 auto3.2 decltype3.3 nullptr 四、范围for五、智能指针六、STL中一些变化七、右值引用和移动语义7.1 左值引用和右值引用7.2 左值引用与右值引用比较7.3 右值引…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

高考志愿填报管理系统---开发介绍

高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发&#xff0c;采用现代化的Web技术&#xff0c;为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## &#x1f4cb; 系统概述 ### &#x1f3af; 系统定…...