Windows 系统监控工具:项目架构与实现详解
文章目录
- 一、项目架构设计
- 1.1 架构总览
- 1.2 数据流向图
- 1.3 核心特点
- 二、核心功能实现
- 2.1 数据采集层 - SystemMonitor 类
- 关键代码:system_monitor.py
- 2.2 界面展示层 - PyQt5 实现
- 关键代码:ui/main_window.py
- 三、项目依赖管理
- 3.1 requirements.txt 详解
- 依赖说明
- 3.2 环境配置
- 四、效果展示
- 4.1 命令行版本演示
- 4.2 图形界面版本特色
- 总结
- 📥 资源下载
- 原创声明
- 参考资料
- 结尾小组件
- 👉 关联文章|Windows 系统监控工具:Python 项目打包为 EXE 详解
简介:本文聚焦 Windows 系统监控、PyQt5 桌面界面、psutil 数据采集与工程化实践,提供完整从架构到实现的入门到进阶指南。
关键词:Windows、系统监控、PyQt5、psutil、GUI、实时监控
一、项目架构设计
本项目采用经典的单体架构模式,通过模块化设计实现了数据采集与界面展示的分离。整体架构可以分为三个核心层次:
1.1 架构总览
单体架构的优势:
- 开发简单:所有功能模块在同一个进程中,便于调试和部署
- 性能优异:模块间通信无网络开销,数据传递效率高
- 资源占用低:适合桌面应用场景,避免微服务架构的复杂性
分层设计的好处:
- 职责清晰:界面层专注展示,业务层处理逻辑,数据层负责采集
- 易于维护:修改某一层不影响其他层,降低代码耦合度
- 可扩展性:新增监控指标只需在对应层添加功能模块
1.2 数据流向图
定时更新机制:
- 使用
QTimer
每1000ms触发一次数据更新 - 避免频繁调用系统API造成性能损耗
- 确保界面响应流畅,不阻塞用户操作
异步处理策略:
- 数据采集在主线程执行,但通过信号槽机制解耦
- 界面更新采用批量模式,减少重绘次数
- 错误处理机制确保单个模块异常不影响整体运行
1.3 核心特点
- 模块化设计:每个功能模块独立封装,便于维护和扩展
- 实时更新:采用定时器机制,每秒刷新系统状态
- 跨平台兼容:基于 psutil 库,理论上支持 Windows、Linux、macOS
- 用户友好:PyQt5 提供现代化的图形界面
二、核心功能实现
2.1 数据采集层 - SystemMonitor 类
数据采集层是整个系统的核心,负责从操作系统获取各种硬件和软件信息。
关键代码:system_monitor.py
import psutil
import time
from typing import Dict, List, Anyclass SystemMonitor:def __init__(self):"""初始化系统监控器"""self.last_net_io = psutil.net_io_counters()self.last_time = time.time()def get_cpu_info(self) -> Dict[str, Any]:"""获取CPU信息"""try:cpu_percent = psutil.cpu_percent(interval=1)cpu_count = psutil.cpu_count()cpu_freq = psutil.cpu_freq()return {'usage_percent': cpu_percent,'core_count': cpu_count,'current_freq': cpu_freq.current if cpu_freq else 0,'max_freq': cpu_freq.max if cpu_freq else 0}except Exception as e:return {'error': str(e)}def get_memory_info(self) -> Dict[str, float]:"""获取内存信息"""try:memory = psutil.virtual_memory()swap = psutil.swap_memory()return {'total': round(memory.total / (1024**3), 2),'available': round(memory.available / (1024**3), 2),'used': round(memory.used / (1024**3), 2),'usage_percent': memory.percent,'swap_total': round(swap.total / (1024**3), 2),'swap_used': round(swap.used / (1024**3), 2),'swap_percent': swap.percent}except Exception as e:return {'error': str(e)}<details>
<summary>💡 psutil 库核心优势</summary>**跨平台兼容性:**
- 统一的API接口,支持Windows、Linux、macOS
- 自动处理不同操作系统的底层差异
- 无需编写平台特定的系统调用代码**性能优化:**
- C语言编写的底层实现,执行效率高
- 智能缓存机制,避免重复的系统调用
- 支持批量获取数据,减少API调用次数**功能完整性:**
- 涵盖CPU、内存、磁盘、网络、进程等所有监控维度
- 提供详细的硬件信息和实时状态数据
- 支持进程管理操作(终止、暂停、恢复等)</details>def get_process_list(self) -> List[Dict]:"""获取进程列表"""processes = []for proc in psutil.process_iter(['pid', 'name', 'cpu_percent', 'memory_info']):try:proc_info = proc.infoprocesses.append({'pid': proc_info['pid'],'name': proc_info['name'],'cpu_percent': proc_info['cpu_percent'],'memory_info': proc_info['memory_info'].rss,})except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):continuereturn sorted(processes, key=lambda x: x['cpu_percent'], reverse=True)
2.2 界面展示层 - PyQt5 实现
界面层采用 PyQt5 框架,提供了现代化的桌面应用体验。
关键代码:ui/main_window.py
from PyQt5.QtWidgets import QMainWindow, QTabWidget, QVBoxLayout, QWidget
from PyQt5.QtCore import QTimer
from .system_tab import SystemTab
from .process_tab import ProcessTab
from system_monitor import SystemMonitorclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("系统监控工具")self.setGeometry(100, 100, 800, 600)# 初始化系统监控器self.monitor = SystemMonitor()# 创建标签页self.tab_widget = QTabWidget()self.system_tab = SystemTab()self.process_tab = ProcessTab()self.tab_widget.addTab(self.system_tab, "系统信息")self.tab_widget.addTab(self.process_tab, "进程管理")self.setCentralWidget(self.tab_widget)# 设置定时器self.timer = QTimer()self.timer.timeout.connect(self.update_data)self.timer.start(1000) # 每秒更新def update_data(self):"""更新数据"""cpu_info = self.monitor.get_cpu_info()memory_info = self.monitor.get_memory_info()disk_info = self.monitor.get_disk_info()network_info = self.monitor.get_network_info()process_list = self.monitor.get_process_list()self.system_tab.update_info(cpu_info, memory_info, disk_info, network_info)self.process_tab.update_processes(process_list)
三、项目依赖管理
3.1 requirements.txt 详解
项目的依赖管理通过 requirements.txt
文件实现,确保环境的一致性和可重现性。
PyQt5==5.15.10
psutil==5.9.8
依赖说明
PyQt5 5.15.10 选择原因:
- 稳定性:LTS版本,bug修复完善,生产环境可靠
- 兼容性:与Python 3.8+完美兼容,支持Windows 10/11
- 功能完整:包含所有必需的GUI组件和高级特性
- 打包友好:与PyInstaller配合良好,打包体积优化
psutil 5.9.8 选择原因:
- 性能优异:C语言底层实现,系统调用效率高
- API稳定:接口设计成熟,向后兼容性好
- 功能全面:覆盖所有主流操作系统的监控需求
- 社区活跃:持续维护更新,问题响应及时
3.2 环境配置
# 创建虚拟环境
python -m venv venv# 激活虚拟环境 (Windows)
venv\Scripts\activate# 使用国内镜像加速安装
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/# 运行程序
python main.py
四、效果展示
4.1 命令行版本演示
首先,我们实现了一个命令行版本用于快速验证功能:
┌─────────────────────────────────────────────────────────────┐
│ === Windows 系统监控工具 === │
├─────────────────────────────────────────────────────────────┤
│ CPU 信息: │
│ 使用率: 15.2% ████████████████░░░░░░░░ │
│ 核心数: 8 │
│ 频率: 2400.0 MHz │
├─────────────────────────────────────────────────────────────┤
│ 内存信息: │
│ 总内存: 16.0 GB │
│ 已使用: 8.5 GB ██████████████████████████░░░░░░ │
│ 可用内存: 7.5 GB │
│ 使用率: 53.1% │
├─────────────────────────────────────────────────────────────┤
│ C盘信息: │
│ 总容量: 500.0 GB │
│ 已使用: 250.0 GB ████████████████████████████████████░░ │
│ 可用空间: 250.0 GB │
│ 使用率: 50.0% │
├─────────────────────────────────────────────────────────────┤
│ 网络信息: │
│ 发送: 1.2 GB ↑ │
│ 接收: 5.8 GB ↓ │
├─────────────────────────────────────────────────────────────┤
│ 进程信息 (按CPU占用排序): │
│ PID: 1234, chrome.exe CPU: 12.5%, 内存: 256.0 MB │
│ PID: 5678, python.exe CPU: 8.3%, 内存: 128.0 MB │
│ PID: 9012, explorer.exe CPU: 2.1%, 内存: 64.0 MB │
│ PID: 3456, notepad.exe CPU: 0.5%, 内存: 32.0 MB │
│ PID: 7890, winlogon.exe CPU: 0.1%, 内存: 16.0 MB │
├─────────────────────────────────────────────────────────────┤
│ 按 Ctrl+C 退出... │
└─────────────────────────────────────────────────────────────┘
4.2 图形界面版本特色
图形界面版本提供了更加直观和用户友好的体验:
核心特色功能:
- 实时监控:每秒自动更新数据,保持信息的实时性
- 直观展示:图表化显示系统状态,一目了然
- 交互操作:支持进程搜索、排序、终止等管理功能
- 响应式设计:界面布局自适应窗口大小变化
总结
本文详细介绍了一个基于 Python 的 Windows 系统监控工具的完整开发过程,从架构设计到功能实现,再到依赖管理和效果展示。该项目展示了如何使用现代 Python 技术栈构建一个功能完整、用户友好的桌面应用程序。
关键技术要点:
- 模块化设计:清晰的职责分离,便于维护和扩展
- psutil 库:高效的跨平台系统信息获取
- PyQt5 框架:现代化的桌面GUI开发
- 项目管理:规范的依赖管理和环境配置
功能扩展方向:
- 历史数据记录:添加SQLite数据库存储历史监控数据
- 告警机制:设置阈值,超限时发送邮件或桌面通知
- 远程监控:支持通过Web界面远程查看系统状态
- 插件系统:支持第三方插件扩展监控功能
技术优化方向:
- 异步处理:使用asyncio提升数据采集效率
- 缓存机制:减少重复的系统调用,提升性能
- 配置文件:支持用户自定义监控项和界面布局
- 国际化:支持多语言界面切换
希望这个项目能为您在 Python 桌面应用开发方面提供有价值的参考和启发。
📥 资源下载
📋 一键获取项目资源完整项目包下载:
- 🔗 SystemMonitor 完整源码仓库 - 最新源码、文档与示例
快速部署脚本:
# 从源码仓库克隆并快速运行
git clone https://gitcode.com/2401_82619496/pythonlab_code
python -m venv venv && venv\Scripts\activate
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
python main.py
技术栈清单:
- Python 3.11.5
- PyQt5 5.15.10
- psutil 5.9.6
- PyInstaller 5.13.2
原创声明
本文为原创内容,首发于 2025.10.1。欢迎转载,但请保留原文链接与作者信息。
参考资料
- 项目源码与文档(本仓库)
- PyQt5 官方文档(GUI 框架参考)
- psutil 使用手册(系统信息采集参考)
- Python 官方文档(语言与标准库参考)
结尾小组件
如果本文对你有帮助,欢迎点赞、收藏、分享。也欢迎留言交流你的实现思路与优化策略。