首页 > 其他分享 >Pyside6-QtCharts+psutil实战-绘制一个CPU监测工具

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

时间:2023-07-01 10:34:14浏览次数:50  
标签:Pyside6 self chart QtCharts psutil usage data cpu axis


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

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

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

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

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

对所需要的控件进行拖拽式,就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中。

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


Pyside6-QtCharts+psutil实战-绘制一个CPU监测工具_折线图_03

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


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

使用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 = False
        self.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 = True

    def resume(self):
        self.paused = False

    def stop(self):  # 新增停止方法
        self.should_stop = True
        self.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 = None
            self.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

标签:Pyside6,self,chart,QtCharts,psutil,usage,data,cpu,axis
From: https://blog.51cto.com/qingan/6598268

相关文章

  • PySide6(Qt for Python) QTableWidget表头边框线问题
    这个问题是在Windows10平台下特有问题。网络上有很多QtC++的解决方案。但是没有特定的PySide6的解决方案(以下是参考的QtC++的解决方案)。链接:https://blog.csdn.net/qq_22642239/article/details/122863344问题描述C++的解决方案是设置纵横表头的样式表:horizontalHeader,v......
  • 【博学谷学习记录】超强总结,用心分享 | 系统资源监控-psutil
    【博学谷IT技术支持】一、介绍psutil(python系统和进程实用程序)是一个跨平台库,用于在Python中检索有关正在运行的进程和系统利用率(CPU、内存、磁盘、网络、传感器)的信息。它主要用于系统监控、分析、限制进程资源和管理正在运行的进程。二、相关api获取CPU信息cpu_count:......
  • 运行pycharm报错ModuleNotFoundError: No module named 'psutil'
    解决办法:psutil库要和电脑的python版本还有系统匹配才可以,我个人是不建议直接用pycharm的插件库来安装第三方包的,他是直接用pycharm安装所以不成功,我去官网下载了匹配他系统的版本再安装就成功了1、upgrade进行升级 ......
  • psutil获取CPU使用率总是为0的原因
    1.可能你获取的是测试脚本本身的CPU使用率,而测试脚本本身CPU占用率就很低,所以检测不出来;2.使用的是psutil.Process().cpu_percent(interval=interval),这个方法好像没有用。只能用替代方法:cpu_percent=psutil.cpu_percent(interval=interval) ......
  • PySide6、PyQt6、ui文件转py文件、Qt Designer 使用
    QT官网:https://www.qt.io/zh-cn/develop1、PySide6、*PyQt6、PyQt5*PySide6、PySide2、PyQt5都是基于Qt库,Qt是一组C++库和开发工具,包括图形用户界面、网络、线程、正则表达式、SQL数据库、SVG、OpenGL、XML、用户和应用程序设置、定位和定位服务、短程通信(NFC和蓝牙)......
  • python通过psutil获取服务器cpu,内存,磁盘使用率
    psutil是一个跨平台的Python库,它允许你获取有关系统进程和系统资源使用情况的信息。它支持Windows、Linux、OSX、FreeBSD、OpenBSD和NetBSD等操作系统,并提供了一些非常有用的功能,如:获取系统CPU使用率、内存使用率、磁盘使用率等信息。获取进程列表、进程状态、进程CPU使用率、......
  • PySide6 项目开发
    Prerequisite在之前的博客(PyQt6/PySide6)讲了基础,这篇博客就是项目实战的过程(人工智能+PySide6)项目参考:B站教程风格组件:PySide6-Fluent-Widgets(虽然这次没用到,下次做项目一定会用到!!)基于人工智能的图片动漫化项目地址:xxx【成品图片】目标功能:AnimeGANv2基础功能实......
  • Python psutil包 获取实时内存大小、内存峰值、CPU利用率
    psutil.Process.mem_infopsutil.Process.mem_info函数返回值是一个nametuple对象,其中各字段的内容含义是:参数名称含义rssResidentSetSize,即实际驻留集大小,表示......
  • PyQt6 / PySide6
    PrerequisiteQt是C++写的图形界面工具,PyQt和PySide都是Qt的儿子PyQt5和PyQt6,一家私人公司开发的,用它开发商用软件要给这家公司交钱,不交钱就吃官司(PyQt6版本是......
  • 经纬度工具类GPSUtil
    packagecom.new3s.manage.util;importorg.apache.commons.lang3.StringUtils;publicclassGPSUtil{publicstaticStringgpsToDecimals(StringgpsParam)......