美文网首页PyQt
runcat for win: 在 windows 任务栏养猫(

runcat for win: 在 windows 任务栏养猫(

作者: 洗洗睡吧i | 来源:发表于2019-02-24 00:19 被阅读28次

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

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:

相关文章

网友评论

    本文标题:runcat for win: 在 windows 任务栏养猫(

    本文链接:https://www.haomeiwen.com/subject/npamyqtx.html