当前位置: 首页 > 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 右值引…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障

关键领域软件测试的"安全密码"&#xff1a;Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力&#xff0c;从金融交易到交通管控&#xff0c;这些关乎国计民生的关键领域…...

Java并发编程实战 Day 11:并发设计模式

【Java并发编程实战 Day 11】并发设计模式 开篇 这是"Java并发编程实战"系列的第11天&#xff0c;今天我们聚焦于并发设计模式。并发设计模式是解决多线程环境下常见问题的经典解决方案&#xff0c;它们不仅提供了优雅的设计思路&#xff0c;还能显著提升系统的性能…...