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

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

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

灭霸发布于 2026/3/26更新于 2026/5/3026 浏览

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. 总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 算法基础:分治法核心原理与实战解析
  • 本地 AI 服务远程管理难题与加密隧道解决方案
  • 计算机科学与技术专业核心技能学习与就业指南
  • LlamaFactory v0.9.4 正式发布:LLM 微调框架全面升级
  • 大模型面试核心知识点总结与参考答案
  • WorkBuddy 一键部署教程:AI 办公智能体配置指南
  • Django 模型核心方法与进阶用法详解
  • C++ string 类详解与模拟实现
  • Python 全栈学习路线指南:入门、爬虫、数据分析与 Web 开发
  • 2024 年十大高效 AI 办公与学习工具推荐
  • Java Web 开发环境搭建:IDEA 集成 Tomcat 安装部署
  • 数据结构基础:动态顺序表详解
  • CarelessWhisper: 将非因果 Whisper 改造为因果流式模型
  • 深度解读混合专家模型(MoE):算法、演变与原理
  • 向量数据库基本概念、原理、算法与选型指南
  • 前端开发者 Agent 工程化开发学习路线
  • PyTorch 多卡训练原理与实现
  • Dify MCP Server 插件:将工作流发布为第三方可调用服务
  • Linux Vim 编辑器详解:从入门到进阶
  • 龙年 AI 生成封面图片玩法与变现指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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