🐱 我用 500 行 Python 写了一只桌面宠物猫,它成了我的编码搭子

发表于 2026-06-20 · 阅读 2,380 · 作者:一个喜欢猫的程序员

上周五晚上,我盯着屏幕上的 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 的椭圆形、多边形和线段画出来。眨眼通过切换睁眼/闭眼帧实现。爱心粒子是一个独立的粒子系统,每帧更新位置和透明度。

📦 源码获取

我把完整源码打包好了,包括:

🐱 桌面宠物猫 Python 源码

下载即用 · 零依赖 · 可自由修改

¥9.9 ¥29.9

💰 立即获取源码

微信扫码支付 · 自动下载

💡 提示: 这个项目的代码结构清晰,非常适合作为 Python GUI 编程的入门项目。如果你想学 tkinter,从头读一遍源码就能掌握 Canvas 绘图、事件绑定、状态机和粒子系统的基础用法。

🎯 写在最后

写这个项目的初衷很简单——debug 太孤独了,想要个伴。但写完以后我发现,它给我的远不止陪伴。每次看到猫咪在屏幕上散步、打盹、冒爱心,那种微小的满足感让 coding 变得不那么枯燥了。

如果你也想要一只桌面搭子,或者想学习 Python GUI 开发,欢迎获取源码。¥9.9 不到一杯奶茶的钱,换一个能陪你写一辈子代码的小猫。

🐱 愿你的桌面不再孤单。

#Python #tkinter #桌面宠物 #开源项目 #程序员日常