runcat for win: 在 windows 任务栏养猫(
2019-02-24 本文已影响28人
洗洗睡吧i
runcat-pyqt5-win
RunCat是一款 mac应用,用奔跑的猫来显示当前系统资源(CPU)占用情况。
但是只有mac版,于是用python撸了一个,可以在windows任务栏(通知区域)养猫。
首先用psutil
获得CPU或内存的使用情况,然后用pyqt5创建QSystemTrayIcon显示在任务栏的托盘区域。
GPU的使用情况可以用nvidia-ml-py
的pynvml模块(仅限nvidia gpu)。
运行效果

Requirements
- psutil
- pyqt5
- nvidia-ml-py
Code
-
CPU 版
import sys
import time
import threading
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QSystemTrayIcon
import psutil
# Get cpu usage
def func():
while True:
global cpu
cpu = psutil.cpu_percent(interval=1) / 100
time.sleep(1)
# Create Qt App
app = QApplication(sys.argv)
app.setQuitOnLastWindowClosed(False)
# Create trayicon
tray = QSystemTrayIcon()
tray.setIcon(QIcon('0.ico'))
tray.setVisible(True)
cpu = 0.1
timer = threading.Timer(1, func, [])
timer.start()
while True:
t = (cpu * cpu - 10 * cpu + 10) / 40
for i in range(5):
# Update trayicon
tray.setIcon(QIcon('{}.ico'.format(i)))
tray.setToolTip('CPU: {:.2%}'.format(cpu))
time.sleep(t)
app.exec_()
- 内存版
import sys
import time
import threading
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QSystemTrayIcon
import psutil
# Get memory usage
def func():
while True:
global mem
mem = psutil.virtual_memory().percent / 100
time.sleep(1)
# Create Qt App
app = QApplication(sys.argv)
app.setQuitOnLastWindowClosed(False)
# Create trayicon
tray = QSystemTrayIcon()
tray.setIcon(QIcon('0.ico'))
tray.setVisible(True)
mem = 0.1
timer = threading.Timer(1, func, [])
timer.start()
while True:
t = (mem * mem - 10 * mem + 10) / 40
for i in range(5):
# Update trayicon
tray.setIcon(QIcon('{}.ico'.format(i)))
tray.setToolTip('Memory: {:.2%}'.format(mem))
time.sleep(t)
app.exec_()
- GPU 版
import sys
import time
import threading
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QSystemTrayIcon
import pynvml
pynvml.nvmlInit()
handle = pynvml.nvmlDeviceGetHandleByIndex(0) # GPU id: 0
# Get gpu usage
def func():
while True:
global gpu
meminfo = pynvml.nvmlDeviceGetMemoryInfo(handle)
gpu = meminfo.used / meminfo.total
time.sleep(1)
# Create Qt App
app = QApplication(sys.argv)
app.setQuitOnLastWindowClosed(False)
# Create trayicon
tray = QSystemTrayIcon()
tray.setIcon(QIcon('0.ico'))
tray.setVisible(True)
gpu = 0.1
timer = threading.Timer(1, func, [])
timer.start()
while True:
t = (gpu * gpu - 10 * gpu + 10) / 40
for i in range(5):
# Update trayicon
tray.setIcon(QIcon('{}.ico'.format(i)))
tray.setToolTip('GPU: {:.2%}'.format(gpu))
time.sleep(t)
app.exec_()
Usage
-
直接clone或下载, 改 *.pyw 运行
-
或者下载打包后的 *.exe, 但是有30多M。。。下载exe
ref: