🐱 我用 500 行 Python 写了一只桌面宠物猫,它成了我的编码搭子
上周五晚上,我盯着屏幕上的 bug 发呆。已经连续 debug 三个小时了,咖啡凉了,心情也凉了。
我突然想:要是桌面上有只猫陪我就好了。
不是那种需要喂食、铲屎、打疫苗的真猫(虽然我也想要),而是一只虚拟的——在屏幕上走来走去,偶尔打个盹,我双击它就开心地冒爱心。
于是我用一个周末写了它。纯 Python + tkinter,零依赖,510 行代码。
✨ 它能做什么
这只橙色的桌面猫咪不是一张静态图。它有完整的行为系统:
🖱️ 鼠标互动 — 拖拽它到屏幕任何位置。双击喂食,它会开心地冒出一堆爱心粒子。右键抚摸,它也会回应。
🚶 自主行动 — 你不理它的时候,它会自己在屏幕上散步、坐下休息、趴下打盹。打盹的时候还会冒 "Zzz" 气泡。
😉 自然细节 — 它会不规律地眨眼,走路时尾巴会摇,坐下时尾巴会盘起来。爱心粒子有半透明渐变效果,飘一会才消失。
🪟 悬浮置顶 — 透明无边框,始终在所有窗口之上,但不遮挡鼠标操作。
🔧 技术实现
整个项目只用了 Python 自带的 tkinter,没装任何第三方库。
核心架构
class DesktopPet:
WIDTH = 180
HEIGHT = 200
def __init__(self):
self.root = tk.Tk()
self.root.overrideredirect(True) # 无边框
self.root.attributes('-topmost', True) # 置顶
self.root.attributes('-transparentcolor', '#020202') # 透明
self.state = 'idle' # idle/walking/sitting/sleeping/happy
self.direction = 1 # 1=面向右, -1=面向左
self.anim_tick = 0 # 动画帧计数器
self.canvas = tk.Canvas(...)
self.tick() # 启动 ~30fps 主循环
状态机设计
宠物的行为由 AI 决策函数驱动:
def ai_decide(self):
r = random.random()
if r < 0.3:
self.start_walk() # 30% 概率散步
elif r < 0.45:
self.set_state('sitting') # 15% 概率坐下
elif r < 0.50:
self.set_state('sleeping') # 5% 概率睡觉
# 其余 50% 保持 idle
纯 Canvas 绘制
猫咪全身——头、耳朵、脸、身体、四条腿、尾巴、胡须、腮红——全部用 tkinter Canvas 的椭圆形、多边形和线段画出来。眨眼通过切换睁眼/闭眼帧实现。爱心粒子是一个独立的粒子系统,每帧更新位置和透明度。
📦 源码获取
我把完整源码打包好了,包括:
- ✅ 510 行完整源码(逐行注释)
- ✅ README 运行说明(3 步搞定)
- ✅ 自定义修改指南(改颜色、大小、行为)
- ✅ Windows / Mac / Linux 通用
🎯 写在最后
写这个项目的初衷很简单——debug 太孤独了,想要个伴。但写完以后我发现,它给我的远不止陪伴。每次看到猫咪在屏幕上散步、打盹、冒爱心,那种微小的满足感让 coding 变得不那么枯燥了。
如果你也想要一只桌面搭子,或者想学习 Python GUI 开发,欢迎获取源码。¥9.9 不到一杯奶茶的钱,换一个能陪你写一辈子代码的小猫。
🐱 愿你的桌面不再孤单。
#Python #tkinter #桌面宠物 #开源项目 #程序员日常