Building PulseMonitor — what I learned making a Windows PC monitor in Python
I'm a self-taught developer from the UK. A few weeks ago I decided to build a real Windows desktop app from scratch using Python and PyQt6.
This is what I learned.
The problem I was solving
Task Manager is fragmented. HWiNFO is powerful but overwhelming. I wanted one clean window that shows everything important about my PC in real time.
Tech stack I chose
- Python 3.11 — language I know best
- PyQt6 — surprisingly capable for desktop UI
- psutil — cross-platform system metrics
- nvidia-smi — subprocess call for NVIDIA GPU data
- WMI — Windows Management Instrumentation for AMD/Intel GPU and temperatures
- SQLite — local performance history database
- PyInstaller — bundles everything into a standalone EXE
The hardest problems I solved
1. Animation performance
My first naive implementation gave every animated widget its own QTimer running at 60fps. With 24 CPU core bars on screen that was 1,500 repaints per second. CPU usage hit 80%+.
The fix: a singleton _AnimDriver class — one shared QTimer that widgets register with when animating. CPU dropped from 80%+ to under 5%.
class _AnimDriver(QObject):
tick = pyqtSignal()
_instance = None
def __init__(self):
super().__init__()
self._timer = QTimer()
self._timer.setInterval(33) # ~30fps
self._timer.timeout.connect(self.tick)
self._count = 0
def register(self):
self._count += 1
if not self._timer.isActive():
self._timer.start()
def deregister(self):
self._count = max(0, self._count - 1)
if self._count == 0:
self._timer.stop()
2. Cross-thread Qt signals
MonitorThread runs in a background thread and can't safely pass Python objects to the UI thread. The solution was a zero-argument signal — the thread emits a tick, the UI reads from a shared snapshot:
class MonitorThread(QThread):
sig_tick = pyqtSignal() # zero args — no object crossing thread boundary
def run(self):
while self._running:
self._snapshot = self._collect_metrics()
self.sig_tick.emit()
time.sleep(self._interval)
3. Supporting AMD and Intel GPUs
nvidia-smi only works for NVIDIA. For AMD and Intel I used WMI's GPU performance counters — the same data source Windows Task Manager uses:
import wmi
w = wmi.WMI(namespace="root\\cimv2")
for item in w.Win32_PerfFormattedData_GPUPerformanceCounters_GPUEngine():
if "engtype_3D" in item.Name:
utilization = item.UtilizationPercentage
4. Packaging with PyInstaller
Getting a clean portable EXE with no false positive antivirus flags took several attempts. Key lessons:
- Remove any kernel-level drivers (WinRing0, LibreHardwareMonitor) — they trigger antivirus
- Use --onedir not --onefile for faster startup
- Embed the icon properly in the spec file
What I built
The finished app has 11 pages: Dashboard, CPU, Memory, GPU, Storage, Processes, Startup, Fans, Network, History and Settings.
It uses under 5% CPU idle, runs from a ZIP with no installation, and has an auto-updater built in.
What's next
- VaultCleaner — a PC cleanup tool using the same stack
- Freemium model once I have enough users
If you're interested in the source code or want to try it:
https://github.com/VaultSoft/PulseMonitor
What would you build differently?
System Requirements
- OS: Windows 10 or Windows 11 (64-bit)
- RAM: ~50 MB while running
- Disk: ~150 MB extracted
- GPU temp monitoring: NVIDIA GPU required (AMD GPU support via HWiNFO64 with admin rights)
- Admin rights: Optional — required only for CPU temperature on AMD Ryzen processors
How to Run PulseMonitor
- Download the ZIP from the link below
- Extract it anywhere — Desktop, Downloads, a USB drive, wherever suits you
-
Run
PulseMonitor.exedirectly from the extracted folder - Optional: right-click the exe and send a shortcut to your Desktop or pin it to the taskbar
That's it. PulseMonitor is fully portable — no installer, no registry entries, no files scattered across your system. To remove it, delete the folder.
Download PulseMonitor — Free
Stop guessing what your PC is doing. PulseMonitor gives you the full picture in one clean window, monitors in the background when you don't need it, and alerts you before small problems become big ones.
→ Download PulseMonitor Free from Gumroad
Compatible with Windows 10 and Windows 11. No subscription. No account required.
Have a question or found a bug? Reach out at vaultwall@proton.me — feedback directly shapes future versions.
Top comments (0)