这是一个运行在 Windows 桌面上的 QWidget 桌面电子宠物应用程序,支持:
- 多动作动画
- 桌面物理模拟(掉落、爬墙、爬天花板)
- 任务栏与桌面边缘的动态吸附
- 拖拽与抛掷
- GPU/CPU 信息监控(在 v1 开始加入)
- 托盘图标动画(类似 RunCat)
- 单例模式优化(在 v2 完成)
本项目包括多个演化版本,从最初的动画演示逐步扩展到带监控与系统优化的可用工具。
- 数十种动作帧动画: idle、walk、sit、standup、wall climb、ceiling walk、drop…
- 高精度帧定时,使宠物动作平滑自然
- 动态资源加载与缓存
- 自由落体(gravity)
- 屏幕边缘吸附
- 爬墙、爬天花板
- (支持任务栏顶部站立)
- 拖拽移动
- 快速/慢速拖动触发不同表情动画
- 抛掷计算(vx/vy)
- 后台监控 GPU 使用率(NVML)
- 后台监控 CPU 使用情况
- 托盘图标随系统负载变化(RunCat 风格)
- 图标自动缩放与安全居中
- 资源监控驱动动画速度
- 支持放大显示与线条化图标(特别处理 PNG 底部内容)
- 单例模式
- 更少的内存占用
- EventLoop 优化
- 图标缓存提升流畅度
- 大幅降低 NVML 调用频率
- 可以支持两个宠物同时出现
- 可以支持设置宠物出现最多数量
H:.
├─.idea # PyCharm 配置
│ └─inspectionProfiles
│
├─icons # 托盘图标资源
│ ├─cat # 原始 RunCat 图标
│ └─cat2 # 云母图案图标(新版)
│ ├─processed # 处理后的透明线条版
│ └─processed_AI # AI 生成的线条强化版本
│
├─img_cat # 猫咪动画资源
├─img_quan # 电子宠物动画(泉)资源
│
└─utils # 工具脚本(如图标处理工具)
-
img_cat一套完整的 云母 动作图:
idle.png(站立发呆)walk00000.png ~ walk00010.png(行走)sit*.png(坐下、坐着发呆、摇腿)wall*.png(爬墙)ceiling*.png(天花板动作)drag*.png(拖拽中的反馈)drop.png / fly.png / born*.png等
-
img_quan一套 犬夜叉/云母 的动作资源,结构与
img_cat类似,可以切换皮肤。
程序中通过 IMG_DIR 指定使用哪套资源,例如:
IMG_DIR = "./img_quan" # 使用 犬夜叉 这一套皮肤
# 或
IMG_DIR = "./img_cat" # 改成 云母 皮肤
-
icons/cat原始彩色图标,常用于托盘动画(例如 0.png ~ 9.png)。
-
icons/cat2另一套图标资源,通常用于你自行处理的风格化版本。
-
icons/cat2/processed使用本地脚本(如你提供的线稿处理工具)生成的图标版本,黑白/线稿化。
-
icons/cat2/processed_AI通过 AI 模型或其他脚本生成的版本,可进行对比或替换使用。
- 实现了完整的桌宠动画系统
- 支持以下动作状态:
idle: 站着发呆walk: 在桌面底部行走sit/sit_idle/sitloop/standup: 坐下 → 发呆 → 摇腿 → 起立fly/drag_throw/drop: 被抛出、在空中飞行、掉落wall_idle/wall_climb/wall_descend: 爬墙ceiling_walk: 天花板上爬行
- 物理逻辑完善:掉落、墙面吸附、天花板移动
- 支持多个宠物实例(分身):
- 右键菜单 → “立即生成分身”
- 某些动作(
born)结束后自动生成新的宠物实例
💡 适合作为最轻量的桌面萌宠
新增:
- 定时获取:
- CPU 占用(
psutil.cpu_percent()) - 内存占用(
psutil.virtual_memory()) - GPU 占用(通过
nvidia-ml-py/pynvml)
- CPU 占用(
- 将资源占用映射到:
- 宠物动作(例如占用高时更疯狂/奔跑)
- 托盘图标动画速度(RunCat 跑得更快)
- 任务栏图标缩放(自定义透明 PNG 处理)
示例逻辑:
- CPU 使用率 < 30% →
idle/ 慢速走路 - CPU 使用率 > 70% →
walk/run/ 托盘动画加速
这是一个实验版本,包含更丰富的交互,但尚未优化资源占用。
注意事项:
- 如你看到
pynvml的 FutureWarning,建议改用nvidia-ml-py。 - 若无 NVIDIA GPU,可关闭 GPU 相关逻辑或做好异常捕获。
基于 v1 做了主要重构:
- 使用 单例模式 防止多次启动:
- 可能会通过文件锁 / 端口 / Qt 单例机制实现,确保同一时间只有一个实例运行。
- 优化计时器与监控:
- 合理设置 QTimer 间隔(例如 500ms / 1000ms),降低 CPU 开销。
- 避免在 UI 线程做大量计算。
- 动作状态机更清晰:
- 将状态与动作、物理行为分开(
update_physics_*系列函数)。 - 对多屏幕环境、任务栏高度做了更完善的支持:
- 宠物可以站在:屏幕底部 / 任务栏顶
- 掉入任务栏底部以下则视为坠落 → 重置到顶部重新掉落
- 将状态与动作、物理行为分开(
推荐作为日常使用的主版本。
核心优化:
- 应用采用单例模式(避免启动多个重复监控线程)
- GPU 监控线程合并
- 图标渲染优化(QIcon 缓存、缩放居中处理)
- 更低的内存消耗与 CPU 占用
🎉 这是推荐的最终稳定版本
基于 v2 做了主要重构:
- 支持犬夜叉、云母两个宠物同时出现
- 支持动态设置同时能够出现的宠物数量
pip install PyQt5 pillow numpy opencv-python nvidia-ml-py
如果是 NVIDIA 用户需要 GPU 监控:
pip install nvidia-ml-py
(注意:pynvml 已弃用)
python pet_v0.8.py
python pet_V1.py
python pet_V2.py
python pet_V3.py
- 左键按住宠物:拖拽到任意位置
- 快速甩动 → 松手后会被抛出(
fly/drag_throw)
- 快速甩动 → 松手后会被抛出(
- 右键点击宠物:打开菜单
- 调试动作(
Wall Climb/Ceiling Walk等) - 立即生成分身
- 移除此宠物
- 全部退出
- 调试动作(
- 多屏幕场景:
- 宠物会检测当前所在屏幕,并使用该屏幕的可用区域(避开任务栏)
- 支持从桌面掉落 → 进入任务栏区域 → 视为坠落 → 重置到顶部
你可以通过修改以下内容来自定义自己的桌宠行为:
- 切换皮肤:
- 把
IMG_DIR指向img_cat/img_quan或新的图集目录。
- 把
- 修改 AI 行为(
decide_ai函数):- 调整 idle → walk → sit → standup 的概率。
- 自定义托盘图标风格:
- 在
icons下增加新目录,例如icons/slime/processed - 调整
RUNCAT_DIR指向新的图标集
- 在
- 增加新动作:
- 在
ACTIONS中新增动作键值对(如"run": [...]) - 在状态机 / AI 中加入相应逻辑(
set_state("run"))
- 在
- 图标过大可能导致 Windows 托盘缩小显示
- GPU 监控需要显卡驱动正确安装
- 若出现“nvml not loaded”,请检查 CUDA/NVIDIA 驱动
- 多实例运行可能造成 GPU 测量冲突(v2 已解决)
本项目未来打算增加的功能:
- 动作编辑器(自定义动画)
- 宠物互动系统(点击、喂食)
- 自定义皮肤加载器
- 增加杀生丸、戈薇、桔梗...等其他动漫IP
- 插件系统
- 更多环境传感(网络测速、温度监控)
本项目灵感来自 WinDesktopPet、RunCat、各种日式桌宠 角色素材:B站UP主“时无千夜”提供的桌宠【【犬夜叉桌宠展示】犬夜叉占领电脑桌面啦】 https://www.bilibili.com/video/BV12a4y1J79V/?share_source=copy_web&vd_source=ef716d8d6e2daf690b69eb33fbe0f9bd 图标素材:角色素材图片处理得到