本篇教學將帶你從零理解並實作一個「系統資源監控工具」,具備以下功能:
✅ 即時監控 CPU / 記憶體使用率✅ 多執行緒背景監控(不卡 UI)
✅ 自動記錄 CSV 日誌
✅ 視覺化圖表(matplotlib)
✅ PyQt5 圖形化操作介面


📦 一、環境準備
請先安裝必要套件:
pip install psutil matplotlib PyQt5
🧠 二、整體架構說明
本專案分成兩大核心:
1️⃣ ResourceMonitorThread(背景監控)
- 負責收集 CPU / Memory
- 每隔 N 秒記錄一次
- 寫入 CSV
- 用 Signal 傳回 UI
2️⃣ ResourceMonitorUI(圖形介面)
- 控制開始 / 停止
- 顯示即時 log
- 顯示統計資訊
- 產生圖表
🔁 三、背景執行緒(QThread)
為什麼要用 QThread?
如果直接在 UI 裡跑 while loop:
❌ UI 會卡死
❌ 無法操作按鈕
👉 所以一定要用「背景執行緒」
📌 核心程式碼
class ResourceMonitorThread(QThread):
update_signal = pyqtSignal(str)
👉 用 signal 把資料丟回 UI
📊 每次監控做什麼?
cpu_usage = psutil.cpu_percent(interval=1)
memory_usage = psutil.virtual_memory().percent
然後:
- 存到記憶體
- 寫入 CSV
- 發送訊息給 UI
📁 CSV 輸出格式
Timestamp,CPU (%),Memory (%)
2026-03-31 10:00:00,35.2,62.1
🖼️ 四、UI 介面設計(PyQt5)
主要元件
元件功能QSpinBox設定監控間隔QPushButton控制開始/停止QTextEdit顯示 logQLabel標題QFileDialog存圖
🎛️ 操作流程
- 設定間隔(預設 180 秒)
- 點擊「開始監控」
- 即時顯示資料
- 點擊「停止」
- 查看統計
- 產生圖表
▶️ 五、開始 / 停止監控
▶️ 開始監控
self.monitor_thread = ResourceMonitorThread(interval)
self.monitor_thread.update_signal.connect(self.update_status)
self.monitor_thread.start()
👉 重點:
- 建立 thread
- 綁定 signal
- 啟動
⏹️ 停止監控
self.monitor_thread.stop()
self.monitor_thread.wait()
👉 wait() 很重要(確保執行緒結束)
📈 六、統計資訊計算
平均 = sum(data) / len(data)
最小 = min(data)
最大 = max(data)
畫面顯示:
📊 監控統計信息
記錄次數: 10
CPU:
平均: 35.2% | 最小: 10% | 最大: 80%
Memory:
平均: 60% | 最小: 55% | 最大: 70%
📊 七、圖表產生(matplotlib)
核心邏輯
fig, (ax1, ax2) = plt.subplots(2, 1)
👉 兩張圖:
- 上:CPU
- 下:Memory
CPU 圖
ax1.plot(x, cpu)
ax1.fill_between(x, cpu)
👉 有:
- 折線
- 填色區域(更好看)
Memory 圖
ax2.plot(x, memory)
儲存圖片
plt.savefig(file_path, dpi=300)
👉 高解析度輸出
🧹 八、清除日誌功能
self.status_text.clear()
self.stats_text.clear()
並加上確認視窗:
QMessageBox.question(...)













