Pyside6-QtCharts+psutil实战-绘制一个CPU监测工具

news/2025/1/16 1:53:49/

今天是实战篇章,我们结合可以快速提升我们开发效率的工具一起开实战一波实时读取系统CPU使用情况的折线图。

使用的开发工具Qt Designer来开发UI界面。

f9a9c605037261d87e024fd242dde084.png十分便捷。使用起来也算比较的简单了,虽然也存在不少的BUG。

b91274b8cb1811e42a2ad8859bbc1af5.png

对所需要的控件进行拖拽式,就OK。后续会出一个简单的视频录制。


第二步,就是先将实时读取代码拟定出来。正确运行了,我们在往UI上套。

使用Pyside6,简单的操作一波。windows上所需要用到的获取CPU数据的工具库是psutil,需要第三方下载。


第三步,确定自己需要使用的Pyside6相关的模块有哪些。

不一定一下子全部知道,最起码要有一个范围的认知,知道大致需要哪些。

PySide6.QtCore 中 Qt, QThread, Signal

PySide6.QtGui 中 QPainter

PySide6.QtWidgets 中 QApplication, QMainWindow, QVBoxLayout, QWidget

PySide6.QtCharts 中 QChartView, QLineSeries, QValueAxis


绘图的关键就是QtCharts

关于QtCharts的不太核心的核心代码如下:

# 创建一个图表视图self.chart_view = QChartView()self.chart_view.setRenderHint(QPainter.Antialiasing)# 创建一个折线图self.series = QLineSeries()self.series.setName("CPU使用率折线图")self.chart_view.chart().addSeries(self.series)# 创建一个轴self.axis_x = QValueAxis()self.axis_x.setRange(0, 50)self.axis_x.setLabelFormat("%d")self.axis_x.setTitleText("Time")self.axis_y = QValueAxis()self.axis_y.setRange(0, 100)self.axis_y.setLabelFormat("%d%%")self.axis_y.setTitleText("Usage")# 添加轴到图表self.chart_view.chart().addAxis(self.axis_x, Qt.AlignBottom)self.chart_view.chart().addAxis(self.axis_y, Qt.AlignLeft)self.series.attachAxis(self.axis_x)self.series.attachAxis(self.axis_y)

有了上述,基本上就可以渲染出一张图了,那么接下来就是数据来源了,从哪来,怎么来,怎么处理。

数据来源主要通过列表的形式传递。所以,我们定义一个列表来存储值。

# 初始化CPU使用率数据列表
self.cpu_usage_data = []

最后,那就是核心的玩意了,传递值并让它显示出来。

# 将数据添加到CPU使用率数据列表中self.cpu_usage_data.append(cpu_usage)# 只保留最近50个数据点self.cpu_usage_data = self.cpu_usage_data[-50:]# 清除折线图数据self.series.clear()# 添加最新的数据点到折线图for i, value in enumerate(self.cpu_usage_data):self.series.append(i, value)# 更新轴的范围self.axis_x.setRange(0, len(self.cpu_usage_data) - 1)self.axis_y.setRange(0, max(self.cpu_usage_data))# 更新图表视图self.chart_view.update()

将数据会知道折线图中,主要还是通过循环的方式将值添加到QLineSeries中。

最后绘制的效果是这样的:

6ecd551148900494cda5cda03e30130b.png

我们需要做一点点修改。加上开始停止以及重置/清除的操作。如图:

30411d8edabbd06a39d489c60dd2336c.png

使用Qt Desgner绘制起来一分钟不需要。写代码要写5-10min。

代码中我们使用了线程(非Python的threading模块,而是Pyside6的Qthread模块。)

主要用来一直用来获取数据,以及自定义型号的。自定义信号用来发送暂停开始结束以及over线程的信号。如下:

class CPUMonitorThread(QThread):cpu_data_updated = Signal(float)stop_requested = Signal()def __init__(self):super(CPUMonitorThread, self).__init__()self.paused = Falseself.should_stop = False  # 新增标志位def run(self):while not self.should_stop:  # 检查标志位if not self.paused:cpu_usage = psutil.cpu_percent()self.cpu_data_updated.emit(cpu_usage)self.msleep(1000)self.finished.emit()  # 发出线程完成的信号def pause(self):self.paused = Truedef resume(self):self.paused = Falsedef stop(self):  # 新增停止方法self.should_stop = Trueself.quit()

三个按钮的信号机制

def clicked(self):self.ui.pushButton.clicked.connect(self.Chart)self.ui.pushButton_3.clicked.connect(self.clear_computer_info)self.ui.pushButton_2.clicked.connect(self.start_or_pause)

清除数据的部分的代码。主要还是要把列表中的数据给清理了。不然数据会一直存在。

def clear_computer_info(self):# 清空折线图数据和CPU使用率数据列表if self.series:self.series.clear()self.cpu_usage_data.clear()self.axis_y = Noneself.chart_view.update()

最后源代码地址在: https://gitee.com/qinganan_admin/Pyside6_Information/blob/master/%E6%A1%88%E4%BE%8B/%E7%9B%91%E6%B5%8B%E7%94%B5%E8%84%91CPU.py

b站链接地址: 【Pyside6-QtCharts+psutil自制一个监测系统CPU小工具-哔哩哔哩】 https://b23.tv/JAWn3f1


http://www.ppmy.cn/news/663523.html

相关文章

最强神作!Crysis深度剖析与优化指南(18-25)

http://bak2.beareyes.com.cn/2/lib/200711/06/20071106421_18.htm 第18页:无限创造力:Sandbox 2编辑器概览 1 集成的CryENGINE Sandbox2编辑器 运行时间引擎是完全集成在CryENGINE Sandbox2编辑器给了设计者“所见既所玩”特性。 开发者在开发过程中可以…

代理服务器之 squid、lvs、nginx、haproxy之间的区别

代理服务器之 squid、lvs、nginx、haproxy之间的区别 代理服务可简单的分为正向代理和反向代理 1、正向代理 正向代理服务器:squid 用于代理内部网络对 Internet 的连接请求(如 VPN/NAT),客户端指定代理服务器,并将本来要直接发送给目标 Web 服务器的 HT…

Stage模型HarmonyOS服务卡片开发ArkTS卡片相关模块

图1 ArkTS卡片相关模块 FormExtensionAbility:卡片扩展模块,提供卡片创建、销毁、刷新等生命周期回调。 FormExtensionContext:FormExtensionAbility的上下文环境,提供FormExtensionAbility具有的接口和能力。 formProvider&…

如何在网上挣钱,这几个项目让你月入过万元

在我国互联网高速发达的时代,上网也已经非常普及。互联网给我们的日常生活带了了无比的便利,也为很多创业者提供了不少的创业机会。互联网可以让你的产品得到更为广阔的销售市场,也可以让你在网络上购买到你所需要的产品。那么如何在网上挣钱…

程序员如何快速赚钱

开发高质量的软件产品: 这是一个长期而又有前途的途径,程序员可以利用自己的专业技能和经验,开发出具有竞争力的软件产品,并通过在线市场或直接销售的方式,获得相应的收入。需要注意的是,开发出高质量的产品…

编程赚钱的7个方法

本文由码农网 – 小峰原创翻译,转载请看清文末的转载要求,欢迎加入技术翻译小组! 几个星期前,当我收到一个自称Someone712的人发给我的一条消息时,我决定要写一篇如何用编程赚钱的博客文章。Someone712: 我…

这些轻松赚钱的方法,学会就能月入上万

在互联网行业混迹了四年,看过太多项目的盈利模式,其中大多数门槛并不高,只是大家没深入了解就以为那很难操作而已。 今天,就给你们分享一些干货,带你们看看这些轻松赚钱的方法,是怎样让那些人月入上万的。

普通人如何网上挣钱?

大家好,今天我将和大家分享作为一个普通人如何在互联网上赚钱。 可惜能在互联网大潮中分得一杯羹的人还是少数。大部分网友只知道这种事,天天在网上找乐子。要么是网购,要么是看着看着就没有想法,那么你就只能坐在那里哀叹社会的…