电脑信息-cpu

This commit is contained in:
yunan 2025-04-27 18:10:04 +08:00
parent bcb01c0b93
commit 7c29925271
2 changed files with 146 additions and 10 deletions

132
README.md
View File

@ -1 +1,131 @@
简介 # 语言 | Language
[中文](#中文) \| [English](#english)
---
### 中文
# 简介
技术选型PySide6
仿照对象windows任务管理器
重要描述主要目的是学习pyside6当然目前还在追求实现功能中(小白一只,只会调库,暂不会自研),把能直接完成的尽快完成,然后重点优化排版与样式
预期功能:
1. CPU:
- 获取cpu名称 - [✔]
- 实时cpu利用率 - [✔]
- 实时获取cpu速度 - [✘]
- 实时获取进程数 - [✔]
- 实时获取线程数 - [✔]
- 实时获取句柄数 - [✔]
- 获取系统正常运行时间 - [✘]
- 获取cpu基准速度 - [✔]
- 获取cpu插槽数 - [✘]
- 获取cpu内核数 - [✔]
- 获取cpu逻辑处理器数 - [✔]
- 获取虚拟化信息 - [✘]
- 获取L1缓存 - [✘]
- 获取L2缓存 - [✔]
- 获取L3缓存 - [✔]
存在问题:
目前来说,在获取 进线程数量以及句柄数量时API的调用会造成卡顿。完全比不上任务管理器的丝滑。
当然还有一大堆问题亟待解决如何利用python获取完整的硬件信息我还在寻找库中目前psutil 和 wmi 库貌似只能提供主要数据,有些数据就无法获取。
目标图(Win11任务管理器)
![image-20250427173734088](C:\Users\yunan\AppData\Roaming\Typora\typora-user-images\image-20250427173734088.png)
实际图:
![image-20250427173824906](C:\Users\yunan\AppData\Roaming\Typora\typora-user-images\image-20250427173824906.png)
2. 内存:
- 实时内存使用量 - [✘]
- 实时内存组合 - [✘]
- 已提交 - [✘]
- 已缓存 - [✘]
- 分页缓冲池 - [✘]
- 非分页缓冲池 - [✘]
- 内存速度 - [✘]
- 已使用插槽数 - [✘]
- 外形规格 - [✘]
- 为硬件保留的内存 - [✘]
3. 磁盘:
- 磁盘名称 - [✘]
- 磁盘处理请求的时间百分比 - [✘]
- 磁盘传输速率 - [✘]
- 活动时间 - [✘]
- 平均响应时间 - [✘]
- 读取速度 - [✘]
- 写入速度 - [✘]
- 容量 - [✘]
- 已格式化大小 - [✘]
- 是否系统磁盘 - [✘]
- 是否页面文件 - [✘]
- 磁盘类型 - [✘]
4. WIFI:
- 网卡名称 - [✘]
- 吞吐量 - [✘]
- 发送 - [✘]
- 接收 - [✘]
- 适配器名称 - [✘]
- SSID - [✘]
- 连接类型 - [✘]
- IPV4 - [✘]
- IPV6 - [✘]
- 信号强度 - [✘]
5. GPU:
- GPU名称 - [✘]
- 3D - [✘]
- Copy - [✘]
- Video Decode - [✘]
- Video Processing - [✘]
- 共享GPU内存 - [✘]
- 实时利用率 - [✘]
- GPU内存 - [✘]
- 驱动版本 - [✘]
- 驱动日期 - [✘]
- DirectX版本 - [✘]
- 物理位置 - [✘]
---
### English
没有英文版,就意思意思。

24
main.py
View File

@ -71,49 +71,55 @@ class MyWindow(QWidget):
self.series.attachAxis(self.data_axisX) self.series.attachAxis(self.data_axisX)
self.series.attachAxis(self.value_axisY) self.series.attachAxis(self.value_axisY)
self.ui.graphicsView.setChart(self.chart) self.ui.graphicsView.setChart(self.chart)
# 获取cpu分级缓存(暂无法获取L1缓存)
self.ui.cpu_L2_cache_value.setText(str(self.c.Win32_Processor()[0].L2CacheSize / 1024)+' MB') self.ui.cpu_L2_cache_value.setText(str(self.c.Win32_Processor()[0].L2CacheSize / 1024)+' MB')
self.ui.cpu_L3_cache_value.setText(str(self.c.Win32_Processor()[0].L3CacheSize / 1024)+' MB') self.ui.cpu_L3_cache_value.setText(str(self.c.Win32_Processor()[0].L3CacheSize / 1024)+' MB')
# print("系统名称: "+self.c.Win32_OperatingSystem()[0].Caption)
cpufreq = psutil.cpu_freq() cpufreq = psutil.cpu_freq()
# 获取cpu内核数
self.ui.cpu_kernel_value.setText(str(psutil.cpu_count(logical=False))) self.ui.cpu_kernel_value.setText(str(psutil.cpu_count(logical=False)))
# 获取cpu逻辑处理器数量
self.ui.cpu_logicprocessor_value.setText(str(psutil.cpu_count(logical=True))) self.ui.cpu_logicprocessor_value.setText(str(psutil.cpu_count(logical=True)))
# 获取cpu基准速度
self.ui.cpu_basespeed_value.setText(str('%.2f'% (cpufreq.current/1000))+' GHz') self.ui.cpu_basespeed_value.setText(str('%.2f'% (cpufreq.current/1000))+' GHz')
# 获取cpu名称
self.ui.cpu_name.setText(str(self.c.Win32_Processor()[0].Name)) self.ui.cpu_name.setText(str(self.c.Win32_Processor()[0].Name))
# 定时
def set_timer(self): def set_timer(self):
self.timer = QTimer(self) self.timer = QTimer(self)
self.timer.timeout.connect(self.cpuLoad) self.timer.timeout.connect(self.cpuLoad)
self.timer.start(1000) # 每隔200毫秒出一个点 self.timer.start(1000) # 每隔1000毫秒出一个点
def cpuLoad(self): def cpuLoad(self):
current_time = QDateTime.currentDateTime() current_time = QDateTime.currentDateTime()
self.data_axisX.setMin(current_time.addSecs(-self.limitminute*60)) self.data_axisX.setMin(current_time.addSecs(-self.limitminute*60))
self.data_axisX.setMax(current_time.addSecs(0)) self.data_axisX.setMax(current_time.addSecs(0))
cpuload = psutil.cpu_percent() cpuload = psutil.cpu_percent()
self.series.append(current_time.toMSecsSinceEpoch(),cpuload) self.series.append(current_time.toMSecsSinceEpoch(),cpuload)
if self.series.at(0): if self.series.at(0):
# 图表更新
# Returns the datetime as the number of milliseconds that have passed since 1970-01-01T00:00:00.000,Coordinated Universal Time(UTC) # Returns the datetime as the number of milliseconds that have passed since 1970-01-01T00:00:00.000,Coordinated Universal Time(UTC)
if self.series.at(0).x()<current_time.addSecs(-self.limitminute*60).toMSecsSinceEpoch(): if self.series.at(0).x()<current_time.addSecs(-self.limitminute*60).toMSecsSinceEpoch():
self.series.remove(0) self.series.remove(0)
# 获取cpu利用率
self.ui.cpu_percent_value.setText(str(cpuload)+'%') self.ui.cpu_percent_value.setText(str(cpuload)+'%')
# 获取正常运行时间(无效)
self.ui.cpu_runningtime_value.setText(str(datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%d:%H:%M:%S"))) self.ui.cpu_runningtime_value.setText(str(datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%d:%H:%M:%S")))
# 获取进程数
self.ui.cpu_process_value.setText(str(len(psutil.pids()))) self.ui.cpu_process_value.setText(str(len(psutil.pids())))
# 获取线程数
self.ui.cpu_thread_value.setText(str(get_total_thread_count_pywin32())) self.ui.cpu_thread_value.setText(str(get_total_thread_count_pywin32()))
#获取句柄数
self.ui.cpu_handle_value.setText(str(get_total_handle_count())) self.ui.cpu_handle_value.setText(str(get_total_handle_count()))
if __name__ == '__main__': if __name__ == '__main__':
app = QApplication(sys.argv) app = QApplication(sys.argv)
window = MyWindow() window = MyWindow()
window.show() window.show()
sys.exit(app.exec()) sys.exit(app.exec())