跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python算法

Python PyQt 上位机实时绘图功能实现

使用 Python 和 PyQt 构建实时绘图上位机的关键技术点。重点讲解了多线程环境下主线程与工作线程的通信机制,强调必须使用信号与槽进行跨线程操作以避免界面卡死。同时对比了 Matplotlib 与 PyQtGraph 在高频数据刷新下的性能差异,指出 PyQtGraph 更适合实时监控系统。文章提供了避免常见坑点的架构建议。

灭霸发布于 2026/3/26更新于 2026/9/974 浏览

Python PyQt 上位机实时绘图功能实现

在嵌入式、自动化和物联网项目中,设备不仅需要'能跑',更要'可见'。一个能实时刷新波形、低延迟响应操作、稳定运行数小时不卡顿的图形化监控界面,往往是决定项目是否专业的分水岭。

本文介绍一套基于 Python + PyQt 的实时绘图系统方案,具备工业思维、线程安全及高效渲染能力。

避免主线程阻塞:PyQt 的 GUI 线程机制

很多人写 PyQt 上位机时,习惯在主循环中直接读取串口数据并更新图表。这会导致界面卡死,按钮无法点击,窗口无法拖动。

问题核心在于:

  1. 所有涉及界面的操作,必须且只能在主线程执行。
  2. 所有耗时任务(如等待数据),绝不能放在主线程里。

PyQt 基于 Qt 框架,采用事件驱动模型。其内部维护一个永不结束的 while 循环(Event Loop),由 app.exec_() 启动。如果在槽函数中使用 time.sleep(5) 或阻塞式串口读取,GUI 会在该时间段内'失联'。

解决方案是将数据采集扔到工作线程,只让主线程负责渲染。但注意:不能简单地用 threading.Thread 新起线程后直接调用 self.plot_widget.plot(...),这会引发线程安全问题。

正确做法是使用 信号与槽机制(Signals & Slots) 进行跨线程通信。这是 Qt 提供的官方通道,会自动将信号打包成事件投递到目标线程的事件队列中,确保安全执行。

绘图库选型:Matplotlib 与 PyQtGraph 对比

若需每秒更新几十次以上的动态图表,不建议使用 Matplotlib。

虽然 Matplotlib 是科学计算标配,但在实时性方面存在明显短板:

  • 每次更新需重绘整个 canvas;
  • 渲染基于 CPU 光栅化,无 GPU 加速;
  • 图形元素创建/销毁成本高;
  • 缩放平移体验生硬,常有延迟。

PyQtGraph 专为高速场景设计,基于 Qt Graphics View 框架,部分功能利用 OpenGL 加速,处理高速数据流表现优异。

指标MatplotlibPyQtGraph
CPU 占用率~40%<8%
界面流畅度一般高

注:测试条件为更新频率 50Hz,绘制 1000 个点。

总结

构建高性能上位机需遵循以下原则:

  1. 严格分离 UI 线程与工作线程。
  2. 使用信号与槽传递数据。
  3. 高频刷新场景优先选择 PyQtGraph 而非 Matplotlib。

目录

  1. Python PyQt 上位机实时绘图功能实现
  2. 避免主线程阻塞:PyQt 的 GUI 线程机制
  3. 绘图库选型:Matplotlib 与 PyQtGraph 对比
  4. 总结

更多推荐文章

查看全部
  • 腾讯混元大模型 AIGC 系列产品深度体验
  • Python 开发者兼职接单指南:核心技术、能力标准与学习路径
  • MK米客方德SD NAND:无人机存储的高效解决方案
  • Stable Diffusion 像素人物帧动画制作指南(含 AnimeEffects 教程)
  • Linux驱动架构全景解析:从设备分类到框架实现深度指南
  • C++ 毕业设计项目效率提升实战:从冗余代码到高性能架构
  • 前端函数防抖原理与实现详解
  • 二级 Python 考试真题及参考代码解析
  • 夸克网盘精选资源:书籍软件游戏与学习教程合集
  • 基于 Mistral-7B 从简历中提取实体构建知识图谱
  • CSS 基础语法、选择器与常见样式详解
  • C++ 各标准版本核心特性差异对比
  • uv 安装 Python 3.11 连接失败报错及镜像配置方案
  • Android Studio 配置 Gradle 国内镜像地址
  • Linux 线程与进程深度剖析:虚实内存转换、实现机制与优缺点
  • Naiz AI:从语义到像素的全球视频本地化方案
  • MATLAB A*路径规划算法仿真与改进实现
  • 大模型(LLM)学习路线与核心资料整理
  • Python 爬虫实战:DrissionPage 的 SessionPage 与 WebPage 模块详解
  • YOLO12 目标检测 WebUI 效果展示:高清图片检测实例

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online