#
用 Trae SOLO 开发:撸猫又撸码!5 小时打造超可爱桌面定时休息猫咪小程序
大家好,今天想跟大家分享一下我最近用 Trae SOLO 开发的一个小项目——一款用猫咪来提醒你休息的桌面工具。从 0 到 1 大概花了 5 个小时,全程用 AI 写了 100% 的代码,想把这个过程记录下来,也给对 AI Coding 感兴趣的朋友一点参考。
-–
##
先说说为啥要做这个
作为程序员,你是不是也经常一写代码就忘了时间?等反应过来脖子都僵了。
市面上也有不少定时提醒工具,但总觉得差点意思:
- 要么功能太臃肿,启动慢得要死
- 要么界面丑得不行,实在没欲望用
- 要么要付费,或者弹广告
- 跨平台支持也是一言难尽
偶然在 GitHub 上看到了 cat-gatekeeper 这个项目(作者 hibernelbearj),觉得用"一只大猫咪占满屏幕逼你休息"这个想法太绝了!
但原版是编译好的二进制,代码不开源,想自己改改都不行。于是决定:**用 Python 重写一个!
我们用 Python 制作了一款超治愈的 Windows 桌面定时休息猫咪小工具!它能实时监控指定进程,倒计时一结束,就会弹出软萌的猫猫动图,贴心提醒你停下工作、喝水休息、活动筋骨~ 软件还自带音乐播放器,休息时自动播放舒缓音乐,让放松时刻更有氛围感!
项目代码:https://github.com/harry138201/purrfect-break-desktop
桌面演示界面
基础配置:自定义运行模式和监控配置
猫咪设置:自定义猫咪GIF图像和提醒词
音频设置:自定义音频播放
监控目标:自定义监控目标进程
结束画面:点击猫猫图像三次退出
后台运行界面1
后台运行界面2
**** 开发流程:**
##
先想清楚:到底要做个啥
动手之前,我先列了个清单,把需求按优先级排了排:
必须有(没这些就不叫这个产品了):
- 到点全屏覆盖,猫咪跳出来
- 能监控具体应用(比如只在刷抖音/逛B站的时候计时)
- 后台运行,不占任务栏
应该有(体验会好很多):
- 配置文件,能自定义时间
- GIF 动画的猫咪(灵魂!)
- 点击多少次可以跳过
可以有(锦上添花):
- 背景音乐
- 毛玻璃效果的 UI
- 图形化的配置面板
- 可以换猫咪样式
以后再说:
- 数据统计
- 云端同步
- 更多猫咪皮肤
AI 小技巧:我把这个需求清单丢给 AI,让它帮我设计架构。虽然它给的方案有点"教科书",但帮我避开了几个低级错误,比如一开始就想到了做平台适配层,而不是把 Windows API 写死在主逻辑里。
-–
##
简单画了个架构
我没画什么复杂的 UML 图,就大概分了三层:
UI层(跟用户打交道的):托盘、覆盖层、配置面板
↓
核心层(业务逻辑):配置管理、时间追踪
↓
平台层(跟系统打交道):Windows 取前台窗口
-–
##
我的开发过程:一步一步来
我是按"先跑起来,再慢慢优化"的思路来的,每一步都能看到成果,不会写了半天连个响都没有。
| 阶段 | 大概用时 | 成果 |
|------|----------|------|
| 第一阶段 | 1小时 | 核心逻辑跑通,命令行就能用 |
| 第二阶段 | 45分钟 | 能检测到我在开什么应用了 |
| 第三阶段 | 1小时 | 猫咪终于跳出来了! |
| 第四阶段 | 45分钟 | 缩到托盘里,像个正经软件了 |
| 第五阶段 | 1小时 | 各种优化,毛玻璃、音乐什么的 |
| 总计 | 5小时 | 能发版了! |
-–
### 第一阶段:先把骨架搭起来(1小时)
这阶段啥 UI 都没做,就先把核心逻辑写了:
- 配置类:读 JSON 文件,把时间什么的配置读出来
- 时间追踪:每秒加一秒,到点就触发
- 主循环:跑起来看看能不能到点提醒
给大家看一下当时的雏形(AI 写的第一版,还挺像回事):
class TimeTracker:
def \_*init*\_(self, config):
self.config = config
self.usage_seconds = 0
def tick(self):
self.usage_seconds += 1
return self.usage_seconds >= self.config.time_limit \* 60
主循环就是个 while True,到了就打印"该休息了"。
说出来你可能不信,这最简陋的版本我居然用了半个小时!命令行打印倒计时也挺有内味儿的。
这阶段的收获:
- 核心逻辑跑通了,后面都是往上加东西
- 跟 AI 磨合了一下,知道怎么提问它给的代码质量最高
- 搭好了目录结构,后面加文件也不乱
-–
### 第二阶段:让程序"看懂"我在干什么(45分钟)
现在要让程序能检测到我在使用什么应用了。
这部分我完全让 AI 带我飞,因为我也不知道 Windows API 怎么用:
我:“帮我写个 Python 函数,获取当前前台窗口的进程名,要兼容 Windows 和 macOS”
AI 吧嗒吧嗒就给我输出了,还贴心地分了两个文件:
windows.py:用 pywin32 和 psutilmacos.py:用 pyobjc 的 AppKit 框架
然后又让 AI 帮我写了个抽象基类,统一接口。
class BasePlatform(ABC):
@abstractmethod
def get_active_process_name(self):
pass
@abstractmethod
def get_active_window_title(self):
pass
AI 踩坑记录:AI 一开始给的 Windows 代码直接用了 ctypes 调 API,写了几十行还各种报错。我让它"换个更简单的方案",它才想到用 pywin32 这个库,几行代码就搞定了。
教训: AI 给的方案不一定是最优的,多问几句说不定有惊喜。
这阶段的收获:
- 平台适配搞定了
- 学会了怎么引导 AI 给出更好的方案
- 抽象基类真香,后面加功能巨方便
-–
### 第三阶段:猫咪终于登场了!(1小时)
这是最有成就感的阶段——猫咪终于能跳出来了!
一开始我想直接用 PyQt5,但 AI 说"先用 Tkinter 吧,标准库不用装依赖,快速验证效果"。
听人劝吃饱饭,那就先用 Tkinter 搞个简单版的:
class CatOverlay:
def show(self):
window = tk.Tk()
window.attributes(‘-fullscreen’, True) # 全屏
window.attributes(‘-topmost’, True) # 置顶
window.overrideredirect(True) # 无边框
window.configure(bg=‘black’)
window.attributes(‘-transparentcolor’, ‘black’) # 透明
就这几行配置,还是 AI 提醒我的,不然我都不知道 Tkinter 能做透明窗口。
然后就是 GIF 播放,这里踩了个大坑:
Tkinter 的 PhotoImage 对象一定要保持引用!不然会被垃圾回收,图片就显示不出来了。这个坑我跟 AI 一起调了 15 分钟才找到原因…
最后加了个"点击猫咪3次跳过"的小功能,为什么是3次?
- 1次太容易误触了,起不到提醒作用
- 5次又太多,用户会烦躁
- 3次刚刚好——想跳过也不难,但也不是随随便便就能跳过的
这阶段的收获:
- 猫咪出来的那一刻,成就感拉满
- 对 Tkinter 的能力有了新认识
- 跟 AI 一起 debug 还挺有意思的,它会给各种可能性
-–
### 第四阶段:缩到托盘里(45分钟)
一个桌面工具总不能一直开个黑窗口吧?
我问 AI:“Python 做系统托盘用什么库好?”
AI 推荐了 pystray,说跨平台,API 简单。
确实简单,几行代码就搞出来了:
import pystray
from PIL import Image
image = Image.open(“cat_icon.png”)
icon = pystray.Icon(“Cat Gatekeeper”, image, menu=menu)
icon.run()
但这里又踩坑了:pystray 的回调是在后台线程跑的,直接调用覆盖层会线程不安全,各种奇奇怪怪的 bug。
我把报错丢给 AI,AI 秒回:“用队列啊,生产者消费者模式”。
对啊!主线程轮询队列,托盘线程只负责往队列里发消息,完美解决。
这阶段的收获:
- 学到了 pystray 这个宝藏库
- 复习了一下线程通信的经典模式
- 程序终于像个正经软件了,不会被当成 cmd 窗口关掉
-–
### 第五阶段:体验升级!毛玻璃+背景音乐(1小时)
到这里功能其实已经完整了,但总觉得差点意思——Tkinter 做的界面还是有点简陋。
干脆升级一下,改用 PyQt5 重写覆盖层!
我把需求告诉 AI:“我要做个全屏透明的窗口,上面放 GIF,旁边要有个半透明的面板显示倒计时,要毛玻璃那种质感”
AI 给的方案是用 rgba() 颜色,把 alpha 通道设成 0.28,再配上大圆角:
self.timer_card.setStyleSheet(“”"
QFrame {
background-color: rgba(255, 250, 245, 0.28);
border-radius: 28px;
}
“”")
效果居然意外的好!半透明的奶白色面板,配上大圆角,高级感一下就出来了。
然后又加了个淡入淡出的动画:
animation = QPropertyAnimation(self, b"windowOpacity")
animation.setDuration(600)
animation.setStartValue(0)
animation.setEndValue(1)
animation.setEasingCurve(QEasingCurve.OutCubic)
animation.start()
有了这个动画,猫咪出现就不会那么突兀了,整个体验一下就上去了。
最后又加了个背景音乐——休息的时候放点轻音乐多舒服~用 pygame 几行代码就搞定了。
这阶段的收获:
- PyQt5 的 QSS 真的太强大了
- 细节决定体验——就一个 600ms 的动画,感觉完全不一样
- AI 写 CSS/ QSS 真的比人强太多了…各种参数张口就来
-–
用 AI 写代码的一些心得
这次开发的代码都是 Trae SOLO 模式写的,聊点真实感受吧:
Trae SOLO 的优点真的很明显
- 不会的东西它会
- 什么 Windows API、macOS 权限问题,我完全不懂,但 AI 能给你写出可运行的代码
- 各种库的用法它都记得住,不用一遍一遍查文档
- 写样板代码飞快
- 什么 get/set、什么配置类、什么基础框架,AI 写得又快又规范
- 省下来的时间可以想更重要的事情
- 提供新思路
- 遇到问题卡住的时候,使用Trae chat模式,它可能会给你一个完全不同的思路
- 比如那个线程队列的问题,我一下没想到,但Trae SOLO模式秒出方案
- 代码生成精准可靠,大幅提升开发效率
- Trae SOLO 提供的代码逻辑清晰、语法规范,直接复用即可快速实现功能
- 针对 Tkinter 等框架能精准调用官方参数,给出的代码开箱即用
- 快速纠错改正
- 面对复杂 bug,Trae SOLO 能快速梳理排查思路、精准定位问题根源
- 无需自己盲目打日志、设断点,结合 Trae SOLO 的建议能快速修复问题
但 Trae SOLO 也不是万能的
- 项目需求和功能还是要人来决定
- AI 可以帮你实现功能,但怎么组织代码、怎么分层、哪里要做抽象,这些它不擅长
- 如果自身没有理清业务需求与整体设计思路,单纯依赖 AI 产出的代码会杂乱冗余,后期维护与迭代成本极高
- 前端界面最好一开始就确定好
- 一方面,我们在一开始的时候,没有确定好前端界面的样式;另一方面,在开发过程中我们又不断的添加新功能。最后在调整界面布局的时候代码经常出错,AI写的代码就像在抽奖,代码不得不回滚了十几次。
我的 Trae SOLO 开发心法
先想清楚架构,让AI设计好前端界面,再让 AI 填代码——架构乱了,AI 写得越多越糟糕
把大任务拆成小问题——不要一上来就"帮我写个软件",要拆成"帮我写个读配置的类"
AI 写的代码一定要看一遍——不然你根本不知道它埋了什么坑
遇到问题多换几种问法——这个方案不行就问问有没有别的方案
不要完全复制粘贴——至少看懂了再粘,不然出了问题你都不知道为啥
-–
总结
5 小时,从 0 到 1,做出了一款自己会天天用的小工具,这种感觉真的很棒。
关于 AI Coding:
我觉得 AI 现在的定位更像是一个"超强的初级程序员"——你让它写什么它都能写出来,但怎么组织、怎么设计、怎么排优先级,还是得人来。
但哪怕这样,效率提升也已经很夸张了。如果是纯手写,这个项目我估计得花两三天。
给想试试 Trae SOLO 写代码的朋友一点建议:
- 不要怕,大胆用,大不了代码删了重写
- 多换几种提问方式,多换几个模型,chat模式的回答质量差别很大
- 代码一定要看一遍再用,不然出了问题你都看不懂
- 项目目标一定要自己想清楚,这是 Trae SOLO 暂时替代不了的
希望这篇分享对大家有帮助~
祝大家编码愉快,记得多休息哦!







