python3GUI--仿win10任务管理器By:PyQt5(附UI源码)

文章目录

  • 一.前言
  • 二.展示
    • 1.主界面
      • 1.进程
      • 2.性能
        • 1.CPU
        • 2.内存
      • 3.简略信息
      • 4.详细信息
      • 5.新建任务
  • 三.设计思路
    • 1.UI设计
      • 1.主界面
        • 1.进程
        • 2.性能
        • 3.详细信息
        • 4.新建任务
        • 5.图表信息组件
    • 2.代码整体设计
      • 1.项目设计心得
      • 2.项目设计其他心得
    • 3.其他心得
  • 四.源代码
  • 五.总结
  • 六.参考


一.前言

最近心血来潮想要做一款仿win10的任务管理器,练习一下基本布局和QChart的使用,实现任务管理、图表查看等功能,撰写本篇播客记录一下开发过程中的一些心得与体会,能给读者提供一些思路。软件打包好,放在了文末。

二.展示

1.主界面

1.进程

详细信息表格支持按表头排序,点击表头会自动排序。
在这里插入图片描述

2.性能

1.CPU

软件每隔1秒会获取当前的CPU信息,绘制成图表展示在页面上,下方的信息也是实时更新的。在这里插入图片描述
动图展示
请添加图片描述

2.内存

内存也是每隔1秒刷新界面、绘制成折线图与内存组合图。
在这里插入图片描述
动图展示
在这里插入图片描述

3.简略信息

在“详细信息”页面点击左下角按钮后,跳转到“简略信息”页面。
在这里插入图片描述
动图展示
在这里插入图片描述

4.详细信息

详细信息表格也支持按表头排序,点击表头会自动排序。
在这里插入图片描述

5.新建任务

可以输入cmd命令或者点击浏览打开一个文件
在这里插入图片描述

三.设计思路

1.UI设计

1.主界面

整体布局为两个frame垂直布局,上面的frame中存放一个stackWidget,第一页放一个tabWidget,tabWidget里面有三个tab,分别是“进程”、“性能”、“详细信息”,其中“性能tab”中再放一个frame,布局为左右布局,左侧放自定义的图表基本信息widget,右侧为一个stackWidget,第一页放CPU信息,第二页放内存信息,都为垂直布局,上方为折线图表,下方为图表详细信息。stackWidget第二页放一个listWidget,用于放置自定义的“详细信息widget”。

1.进程

在这里插入图片描述

2.性能

在这里插入图片描述

3.详细信息

在这里插入图片描述

4.新建任务

新建任务为一个独立的widget,属性为QWidget。
在这里插入图片描述

5.图表信息组件

用于生成图表以及图表基本信息,实例化之后会改变其中内容。也是一个独立的widget,属性为QWidget。
在这里插入图片描述

2.代码整体设计

1.项目设计心得

笔者在进行Pyqt项目设计之前会先调研,评估一下UI、功能的整体难度,删繁就简,整体地去看待这个项目。通常我的Pyqt项目至少会有四部分组成:1.main_ui.py主窗口UI,由pyuic工具把xml格式的ui文件转化为Python代码而来。2.engine.py软件引擎,就是用户操作后,软件执行的核心代码,理论上是可以脱离所在项目单独存在的。3.CWidgets.py,此文件用于存放自定义的Widget以及相关子窗口的调试代码。4.main_GUI.py主窗口逻辑调用,是它把engine和Cwidgets和main_ui联系到一起,其中包含主窗口相关调度,子窗口实例化,核心引擎调用代码。

2.项目设计其他心得

在项目设计中始终保持“高内聚、低耦合”的代码设计思想,从整体看局部,再在从局部看整体,认真拆分每一个组件,最终从主文件中把每个子组件调用起来。

3.其他心得

四.源代码

这里贴一下UI的主窗口代码,由pyuic转化而来,包含主布局。

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'task_god_ui.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(725, 522)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(":/icons/icons/QQ截图20230709080218.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        MainWindow.setWindowIcon(icon)
        MainWindow.setStyleSheet("#QTableWidget,QListWidget,#toolButton_showDetail{border:none;}\n"
"*{font-family:\"微软雅黑\"}\n"
"QFrame,#tabWidget,QStackedWidget,QStackedWidget::page{\n"
"    background-color: rgb(255, 255, 255);\n"
"}\n"
"QFrame,QTabWidget,QStackedWidget::page,#scrollArea,#scrollAreaWidgetContents{\n"
"    background-color: rgb(255, 255, 255);\n"
"}\n"
"#tableWidget::item,#tableWidget_2::item{border-left:1px solid rgb(229, 229, 229);}\n"
"QTableWidget::item:hover,QTableWidget::item:selected{\n"
"    background-color:rgb(229, 243, 255);\n"
"}\n"
"QScrollArea{border:none;}")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setSpacing(0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.frame = QtWidgets.QFrame(self.centralwidget)
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.frame)
        self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_2.setSpacing(0)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.stackedWidget = QtWidgets.QStackedWidget(self.frame)
        self.stackedWidget.setObjectName("stackedWidget")
        self.page = QtWidgets.QWidget()
        self.page.setObjectName("page")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.page)
        self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_2.setSpacing(0)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.tabWidget = QtWidgets.QTabWidget(self.page)
        self.tabWidget.setAutoFillBackground(False)
        self.tabWidget.setObjectName("tabWidget")
        self.tab = QtWidgets.QWidget()
        self.tab.setObjectName("tab")
        self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.tab)
        self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_4.setSpacing(0)
        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
        self.tableWidget = QtWidgets.QTableWidget(self.tab)
        self.tableWidget.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.tableWidget.setAutoFillBackground(True)
        self.tableWidget.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
        self.tableWidget.setAlternatingRowColors(False)
        self.tableWidget.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
        self.tableWidget.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
        self.tableWidget.setShowGrid(False)
        self.tableWidget.setObjectName("tableWidget")
        self.tableWidget.setColumnCount(7)
        self.tableWidget.setRowCount(0)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(2, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(3, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(4, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(5, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(6, item)
        self.tableWidget.horizontalHeader().setVisible(True)
        self.tableWidget.horizontalHeader().setCascadingSectionResizes(True)
        self.tableWidget.horizontalHeader().setSortIndicatorShown(True)
        self.tableWidget.horizontalHeader().setStretchLastSection(True)
        self.tableWidget.verticalHeader().setVisible(False)
        self.tableWidget.verticalHeader().setCascadingSectionResizes(True)
        self.tableWidget.verticalHeader().setSortIndicatorShown(True)
        self.tableWidget.verticalHeader().setStretchLastSection(True)
        self.horizontalLayout_4.addWidget(self.tableWidget)
        self.tabWidget.addTab(self.tab, "")
        self.tab_3 = QtWidgets.QWidget()
        self.tab_3.setObjectName("tab_3")
        self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.tab_3)
        self.verticalLayout_3.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_3.setSpacing(0)
        self.verticalLayout_3.setObjectName("verticalLayout_3")
        self.frame_3 = QtWidgets.QFrame(self.tab_3)
        self.frame_3.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_3.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_3.setObjectName("frame_3")
        self.horizontalLayout_5 = QtWidgets.QHBoxLayout(self.frame_3)
        self.horizontalLayout_5.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_5.setSpacing(0)
        self.horizontalLayout_5.setObjectName("horizontalLayout_5")
        self.scrollArea = QtWidgets.QScrollArea(self.frame_3)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.scrollArea.sizePolicy().hasHeightForWidth())
        self.scrollArea.setSizePolicy(sizePolicy)
        self.scrollArea.setMinimumSize(QtCore.QSize(240, 0))
        self.scrollArea.setMaximumSize(QtCore.QSize(240, 16777215))
        self.scrollArea.setStyleSheet("")
        self.scrollArea.setWidgetResizable(True)
        self.scrollArea.setObjectName("scrollArea")
        self.scrollAreaWidgetContents = QtWidgets.QWidget()
        self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 240, 30))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.scrollAreaWidgetContents.sizePolicy().hasHeightForWidth())
        self.scrollAreaWidgetContents.setSizePolicy(sizePolicy)
        self.scrollAreaWidgetContents.setMinimumSize(QtCore.QSize(240, 0))
        self.scrollAreaWidgetContents.setMaximumSize(QtCore.QSize(240, 16777215))
        self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
        self.verticalLayout_8 = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents)
        self.verticalLayout_8.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_8.setSpacing(0)
        self.verticalLayout_8.setObjectName("verticalLayout_8")
        self.verticalLayout_5 = QtWidgets.QVBoxLayout()
        self.verticalLayout_5.setContentsMargins(-1, 0, 3, -1)
        self.verticalLayout_5.setSpacing(0)
        self.verticalLayout_5.setObjectName("verticalLayout_5")
        spacerItem = QtWidgets.QSpacerItem(0, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.verticalLayout_5.addItem(spacerItem)
        self.verticalLayout_8.addLayout(self.verticalLayout_5)
        self.scrollArea.setWidget(self.scrollAreaWidgetContents)
        self.horizontalLayout_5.addWidget(self.scrollArea)
        self.line_2 = QtWidgets.QFrame(self.frame_3)
        self.line_2.setFrameShape(QtWidgets.QFrame.VLine)
        self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_2.setObjectName("line_2")
        self.horizontalLayout_5.addWidget(self.line_2)
        self.stackedWidget_2 = QtWidgets.QStackedWidget(self.frame_3)
        self.stackedWidget_2.setObjectName("stackedWidget_2")
        self.page_3 = QtWidgets.QWidget()
        self.page_3.setObjectName("page_3")
        self.verticalLayout_6 = QtWidgets.QVBoxLayout(self.page_3)
        self.verticalLayout_6.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_6.setSpacing(0)
        self.verticalLayout_6.setObjectName("verticalLayout_6")
        self.stackedWidget_2.addWidget(self.page_3)
        self.page_4 = QtWidgets.QWidget()
        self.page_4.setObjectName("page_4")
        self.stackedWidget_2.addWidget(self.page_4)
        self.horizontalLayout_5.addWidget(self.stackedWidget_2)
        self.horizontalLayout_5.setStretch(0, 1)
        self.horizontalLayout_5.setStretch(2, 4)
        self.verticalLayout_3.addWidget(self.frame_3)
        self.tabWidget.addTab(self.tab_3, "")
        self.tab_2 = QtWidgets.QWidget()
        self.tab_2.setObjectName("tab_2")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.tab_2)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.tableWidget_2 = hoverTableWidget(self.tab_2)
        self.tableWidget_2.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.tableWidget_2.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
        self.tableWidget_2.setShowGrid(False)
        self.tableWidget_2.setObjectName("tableWidget_2")
        self.tableWidget_2.setColumnCount(5)
        self.tableWidget_2.setRowCount(0)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_2.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_2.setHorizontalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_2.setHorizontalHeaderItem(2, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_2.setHorizontalHeaderItem(3, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_2.setHorizontalHeaderItem(4, item)
        self.tableWidget_2.horizontalHeader().setStretchLastSection(False)
        self.tableWidget_2.verticalHeader().setVisible(False)
        self.tableWidget_2.verticalHeader().setSortIndicatorShown(False)
        self.tableWidget_2.verticalHeader().setStretchLastSection(False)
        self.horizontalLayout.addWidget(self.tableWidget_2)
        self.tabWidget.addTab(self.tab_2, "")
        self.verticalLayout_2.addWidget(self.tabWidget)
        self.stackedWidget.addWidget(self.page)
        self.page_2 = QtWidgets.QWidget()
        self.page_2.setObjectName("page_2")
        self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.page_2)
        self.verticalLayout_4.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_4.setSpacing(0)
        self.verticalLayout_4.setObjectName("verticalLayout_4")
        self.listWidget = QtWidgets.QListWidget(self.page_2)
        self.listWidget.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.listWidget.setObjectName("listWidget")
        self.verticalLayout_4.addWidget(self.listWidget)
        self.stackedWidget.addWidget(self.page_2)
        self.horizontalLayout_2.addWidget(self.stackedWidget)
        self.verticalLayout.addWidget(self.frame)
        self.line = QtWidgets.QFrame(self.centralwidget)
        self.line.setFrameShape(QtWidgets.QFrame.HLine)
        self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line.setObjectName("line")
        self.verticalLayout.addWidget(self.line)
        self.frame_2 = QtWidgets.QFrame(self.centralwidget)
        self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_2.setObjectName("frame_2")
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.frame_2)
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.toolButton_showDetail = HoverBtn(self.frame_2)
        self.toolButton_showDetail.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_showDetail.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
        self.toolButton_showDetail.setObjectName("toolButton_showDetail")
        self.horizontalLayout_3.addWidget(self.toolButton_showDetail)
        spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_3.addItem(spacerItem1)
        self.termite_bt = QtWidgets.QPushButton(self.frame_2)
        self.termite_bt.setEnabled(False)
        self.termite_bt.setObjectName("termite_bt")
        self.horizontalLayout_3.addWidget(self.termite_bt)
        self.verticalLayout.addWidget(self.frame_2)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 725, 23))
        self.menubar.setObjectName("menubar")
        self.menu = QtWidgets.QMenu(self.menubar)
        self.menu.setObjectName("menu")
        self.menu_2 = QtWidgets.QMenu(self.menubar)
        self.menu_2.setObjectName("menu_2")
        self.menu_3 = QtWidgets.QMenu(self.menubar)
        self.menu_3.setObjectName("menu_3")
        self.menu_4 = QtWidgets.QMenu(self.menu_3)
        self.menu_4.setObjectName("menu_4")
        MainWindow.setMenuBar(self.menubar)
        self.actionrun = QtWidgets.QAction(MainWindow)
        self.actionrun.setShortcutContext(QtCore.Qt.WindowShortcut)
        self.actionrun.setObjectName("actionrun")
        self.actionexit = QtWidgets.QAction(MainWindow)
        self.actionexit.setObjectName("actionexit")
        self.actiontop = QtWidgets.QAction(MainWindow)
        self.actiontop.setCheckable(True)
        self.actiontop.setChecked(True)
        self.actiontop.setObjectName("actiontop")
        self.actionfre = QtWidgets.QAction(MainWindow)
        self.actionfre.setObjectName("actionfre")
        self.actionhi = QtWidgets.QAction(MainWindow)
        self.actionhi.setCheckable(True)
        self.actionhi.setObjectName("actionhi")
        self.actionnor = QtWidgets.QAction(MainWindow)
        self.actionnor.setCheckable(True)
        self.actionnor.setChecked(True)
        self.actionnor.setObjectName("actionnor")
        self.actiondi = QtWidgets.QAction(MainWindow)
        self.actiondi.setCheckable(True)
        self.actiondi.setObjectName("actiondi")
        self.actiontm = QtWidgets.QAction(MainWindow)
        self.actiontm.setCheckable(True)
        self.actiontm.setObjectName("actiontm")
        self.actionabu = QtWidgets.QAction(MainWindow)
        self.actionabu.setObjectName("actionabu")
        self.menu.addAction(self.actionrun)
        self.menu.addAction(self.actionexit)
        self.menu_2.addAction(self.actiontop)
        self.menu_4.addAction(self.actionhi)
        self.menu_4.addAction(self.actionnor)
        self.menu_4.addAction(self.actiondi)
        self.menu_4.addAction(self.actiontm)
        self.menu_3.addAction(self.actionfre)
        self.menu_3.addAction(self.menu_4.menuAction())
        self.menu_3.addAction(self.actionabu)
        self.menubar.addAction(self.menu.menuAction())
        self.menubar.addAction(self.menu_2.menuAction())
        self.menubar.addAction(self.menu_3.menuAction())

        self.retranslateUi(MainWindow)
        self.stackedWidget.setCurrentIndex(0)
        self.tabWidget.setCurrentIndex(0)
        self.stackedWidget_2.setCurrentIndex(1)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "任务管理器"))
        self.tableWidget.setSortingEnabled(True)
        item = self.tableWidget.horizontalHeaderItem(0)
        item.setText(_translate("MainWindow", "名称"))
        item = self.tableWidget.horizontalHeaderItem(1)
        item.setText(_translate("MainWindow", "状态"))
        item = self.tableWidget.horizontalHeaderItem(2)
        item.setText(_translate("MainWindow", "CPU"))
        item = self.tableWidget.horizontalHeaderItem(3)
        item.setText(_translate("MainWindow", "内存"))
        item = self.tableWidget.horizontalHeaderItem(4)
        item.setText(_translate("MainWindow", "磁盘"))
        item = self.tableWidget.horizontalHeaderItem(5)
        item.setText(_translate("MainWindow", "网络"))
        item = self.tableWidget.horizontalHeaderItem(6)
        item.setText(_translate("MainWindow", "PID"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "进程"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("MainWindow", "性能"))
        self.tableWidget_2.setSortingEnabled(True)
        item = self.tableWidget_2.horizontalHeaderItem(0)
        item.setText(_translate("MainWindow", "名称"))
        item = self.tableWidget_2.horizontalHeaderItem(1)
        item.setText(_translate("MainWindow", "PID"))
        item = self.tableWidget_2.horizontalHeaderItem(2)
        item.setText(_translate("MainWindow", "状态"))
        item = self.tableWidget_2.horizontalHeaderItem(3)
        item.setText(_translate("MainWindow", "用户名"))
        item = self.tableWidget_2.horizontalHeaderItem(4)
        item.setText(_translate("MainWindow", "CPU"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "详细信息"))
        self.toolButton_showDetail.setText(_translate("MainWindow", "简略信息"))
        self.termite_bt.setText(_translate("MainWindow", "结束任务"))
        self.menu.setTitle(_translate("MainWindow", "文件"))
        self.menu_2.setTitle(_translate("MainWindow", "选项"))
        self.menu_3.setTitle(_translate("MainWindow", "查看"))
        self.menu_4.setTitle(_translate("MainWindow", "更新速度"))
        self.actionrun.setText(_translate("MainWindow", "运行新任务"))
        self.actionexit.setText(_translate("MainWindow", "退出"))
        self.actiontop.setText(_translate("MainWindow", "置于顶层"))
        self.actionfre.setText(_translate("MainWindow", "立即刷新"))
        self.actionhi.setText(_translate("MainWindow", "高"))
        self.actionnor.setText(_translate("MainWindow", "正常"))
        self.actiondi.setText(_translate("MainWindow", "低"))
        self.actiontm.setText(_translate("MainWindow", "已暂停"))
        self.actionabu.setText(_translate("MainWindow", "关于作者"))
from CWidgets import HoverBtn, hoverTableWidget
import resources_rc

五.总结

本次使用Pyqt5制作了一款仿win10任务管理器,支持对进程进行管理,可视化地展示windows设备的内存、CPU等信息,另外支持新建任务。撰写本篇记录下我的开发思路顺便和大家分享我的开发成果,软件打包好放在了蓝奏云,大家可自取。最后希望大家多多讨论,可以留言、私信给我,我都会看的,大家也不要吝啬自己的赞哦!谢谢大家!
在这里插入图片描述

六.参考

  1. QCharts - 4.QValueAxis类详解
  2. 《python》用psutil获取电脑CPU内存等参数信息
  3. pyqt5,Qchart画折线图,设定多个不同刻度的Y轴,修改自定义折线图的坐标轴,改变折线图的底色
  4. python --psutil(cpu、内存、磁盘情况、结束指定进程、端口占用)
  5. Win10技巧:Win10任务管理器知识介绍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/39521.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

华为无线ac+ap旁挂二层组网常用配置案例

AC控制器理解配置步骤: capwap source interface Vlanif 100 //源IP回包地址 wlan ssid-profile name test //新建个模版名称为test ssid test //wifi名称 wlan security-profile name test //建立安全模版也叫test security wpa-wpa2 psk pass-phrase admin123 a…

【PDFBox】PDFBox操作PDF文档之读取指定页面文本内容、读取所有页面文本内容、根据模板文件生成PDF文档

这篇文章,主要介绍PDFBox操作PDF文档之读取指定页面文本内容、读取所有页面文本内容、根据模板文件生成PDF文档。 目录 一、PDFBox操作文本 1.1、读取所有页面文本内容 1.2、读取指定页面文本内容 1.3、写入文本内容 1.4、替换文本内容 (1&#xf…

在 Amazon 上以高可用性模式实现 Microsoft SQL 数据库服务现代化的注意事项

许多企业都有需要 Microsoft SQL Server 来运行关系数据库工作负载的应用程序:一些应用程序可能是专有软件,供应商可使用它强制 Microsoft SQL Server 运行数据库服务;其他应用程序可能是长期存在的、自主开发的应用程序,它们在最…

XUbuntu22.04之vim无法复制内容到系统(一百八十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

将大模型集成到语音识别系统中的例子

概述 本文旨在探索将大型语言模型(LLMs)集成到自动语音识别(ASR)系统中以提高转录准确性的潜力。 文章介绍了目前的ASR方法及其存在的问题,并对使用LLMs的上下文学习能力来改进ASR系统的性能进行了合理的动机论证。 本…

VIM文本如何复制到系统剪切板?

今天从vim上用鼠标复制代码,发现把VIM当中的行号也复制进去了,就很麻烦,于是简单研究了下,如果vim支持clipboard的话就比较好办,具体支持与否,使用命令查看: vim --version | grep "clipb…

Android系统启动流程分析

当按下Android系统的开机电源按键时候,硬件会触发引导芯片,执行预定义的代码,然后加载引导程序(BootLoader)到RAM,Bootloader是Android系统起来前第一个程序,主要用来拉起Android系统程序,Android系统被拉起…

基于Java+Swingl实现拼图游戏

基于JavaSwingl实现拼图游戏 一、系统介绍二、效果展示三、其他系统实现四、获取源码 一、系统介绍 拼图游戏是一个简单的小程序,游戏规则如下:将一张大图分成9张小图,然后任意挑8张图,随意放在3行3列的矩阵中。 通过点击鼠标移动…

Maven 项目构建生命周期

Maven 项目构建生命周期 一句话: Maven 构建生命周期描述的是一次构建过程经历了多少个事件 生命周期的3 大阶段 clean 清理工作 default 核心工作,例如编译,测试,打包,部署等 site 产生报告,发布站点等 生命周期…

react和vue2/3父子组件的双向绑定(sync、emit、v-model)

目录 Vue .sync(2.3.0) $emit (2.3后) 自定义组件的 v-model 2.2.0 v-modelemits(3.0取消了.sync) React 父组件回调函数 相关基础 框架 MVC (Model View Controller)/MVP(Model View…

RHCSA——Linux网络、磁盘及软件包管理

ZY目录 Linux操作系统讲解:一、网络管理1、NetworkManager1.1、nmtui界面:1.2、nmcli使用方法: 2、配置网络2.1、网络接口以及网络连接2.2、配置方法:2.3、ping命令:2.4、wget命令 二、磁盘管理2.1、分区得两种格式2.1…

日撸java三百行day77-79

文章目录 说明GUI1. GUI 总体布局2. GUI 代码理解2.1 对话框相关控件2.1.1 ApplicationShowdown.java(关闭应用程序)2.1.2 DialogCloser.java(关闭对话框)2.1.3 ErrorDialog.java(显示错误信息)2.1.4 HelpD…

day35-Postman/ajax

0目录 1.postman 2.ajax 1.Postman 1.1 定义:postman用于测试http协议接口,无论是开发还是测试人员 1.2 Servlet中的doGet()/doPost…

idea 常用快捷键总结

IDEA常用快捷键总结 很多新手小白在使用IDEA进行代码编写的时候 对快捷键很感兴趣 这里泡泡给大家总结了一些常用的快捷键 希望能帮助到你 记得要收藏下来时常观看并且练习,才能熟练哦~ 1. 根据psvm或者main快速生成主函数 我们可以在类中输入psvm 或者main 然后I…

C# Winfrom将DataGridView数据导入Excel

1.项目添加Word和Excel的COM类型库引用 2.创建Excel工作表 //定义Excel操作对象Microsoft.Office.Interop.Excel.Application excelApp new Microsoft.Office.Interop.Excel.Application();//定义Excel工作表Microsoft.Office.Interop.Excel.Worksheet worksheet excelApp.Wo…

TCP的窗口控制和重发控制【TCP原理(笔记三)】

文章目录 利用窗口控制提高速度窗口控制与重发控制确认应答未能返回的情况某个报文段丢失的情况 控制流 利用窗口控制提高速度 TCP以1个段为单位,每发一个段进行一次确认应答的处理,如图。这样的传输方式有一个缺点。那就是,包的往返时间越长…

Centos使用docker部署nacos

Centos使用docker部署nacos 对于使用Docker部署Nacos,您可以按照以下步骤进行操作: 在您的服务器上安装Docker和Docker Compose。创建一个用于存储Nacos数据的目录,例如/path/to/nacos/data。创建一个docker-compose.yml文件,并…

心电前置放大电路制作与原理详细分析(附电路板实物图)

心电前置放大电路制作与原理详细分析(附电路板实物图) 实验目的实验结果实验电路图原理解释与计算实验测试过程实验参数测量实验洞洞板焊接实验目的 心电信号具有微弱、低频、和高阻抗等特性,极其容易受到干扰。为了实现心电信号的放大,前置放大器需要满足高输入阻抗、高共…

前端开发如何更好的避免样式冲突?级联层(CSS@layer)

目录 前言 一、什么是级联层 (Cascade Layers)? 1.1 级联层的官方定义 1.2 级联层为了解决什么问题? 二、理解级联层的前提 —— 级联 (cascade) 2.1 什么是级联? 2.2 当前级联的排序标准 2.3 级联起源(Cascading Origins…

Spring Boot进阶(54):Windows 平台安装 MongoDB数据库 | 超级详细,建议收藏

1. 前言🔥 Windows如何安装MongoDB数据库及使用呢?这将又会是干货满满的一期,全程无尿点不废话只抓重点教,具有非常好的学习效果,拿好小板凳准备就坐!希望学习的过程中大家认真听好好学,学习的途…