用 Trae SOLO 开发:撸猫又撸码!5 小时打造超可爱桌面定时休息猫咪程序

# :cat_face: 用 Trae SOLO 开发:撸猫又撸码!5 小时打造超可爱桌面定时休息猫咪小程序

大家好,今天想跟大家分享一下我最近用 Trae SOLO 开发的一个小项目——一款用猫咪来提醒你休息的桌面工具。从 0 到 1 大概花了 5 个小时,全程用 AI 写了 100% 的代码,想把这个过程记录下来,也给对 AI Coding 感兴趣的朋友一点参考。

-–

## :clipboard: 先说说为啥要做这个

作为程序员,你是不是也经常一写代码就忘了时间?等反应过来脖子都僵了。

市面上也有不少定时提醒工具,但总觉得差点意思:

  • 要么功能太臃肿,启动慢得要死
  • 要么界面丑得不行,实在没欲望用
  • 要么要付费,或者弹广告
  • 跨平台支持也是一言难尽

偶然在 GitHub 上看到了 cat-gatekeeper 这个项目(作者 hibernelbearj),觉得用"一只大猫咪占满屏幕逼你休息"这个想法太绝了!

但原版是编译好的二进制,代码不开源,想自己改改都不行。于是决定:**用 Python 重写一个!

我们用 Python 制作了一款超治愈的 Windows 桌面定时休息猫咪小工具!它能实时监控指定进程,倒计时一结束,就会弹出软萌的猫猫动图,贴心提醒你停下工作、喝水休息、活动筋骨~ 软件还自带音乐播放器,休息时自动播放舒缓音乐,让放松时刻更有氛围感!

项目代码:https://github.com/harry138201/purrfect-break-desktop

桌面演示界面

基础配置:自定义运行模式和监控配置

猫咪设置:自定义猫咪GIF图像和提醒词

音频设置:自定义音频播放

监控目标:自定义监控目标进程

结束画面:点击猫猫图像三次退出

后台运行界面1

后台运行界面2

**** 开发流程:**

## :bullseye: 先想清楚:到底要做个啥

动手之前,我先列了个清单,把需求按优先级排了排:

必须有(没这些就不叫这个产品了):

  • 到点全屏覆盖,猫咪跳出来
  • 能监控具体应用(比如只在刷抖音/逛B站的时候计时)
  • 后台运行,不占任务栏

应该有(体验会好很多):

  • 配置文件,能自定义时间
  • GIF 动画的猫咪(灵魂!)
  • 点击多少次可以跳过

可以有(锦上添花):

  • 背景音乐
  • 毛玻璃效果的 UI
  • 图形化的配置面板
  • 可以换猫咪样式

以后再说:

  • 数据统计
  • 云端同步
  • 更多猫咪皮肤

:robot: AI 小技巧:我把这个需求清单丢给 AI,让它帮我设计架构。虽然它给的方案有点"教科书",但帮我避开了几个低级错误,比如一开始就想到了做平台适配层,而不是把 Windows API 写死在主逻辑里。

-–

## :card_index_dividers: 简单画了个架构

我没画什么复杂的 UML 图,就大概分了三层:

UI层(跟用户打交道的):托盘、覆盖层、配置面板

↓

核心层(业务逻辑):配置管理、时间追踪

↓

平台层(跟系统打交道):Windows 取前台窗口

-–

## :stopwatch: 我的开发过程:一步一步来

我是按"先跑起来,再慢慢优化"的思路来的,每一步都能看到成果,不会写了半天连个响都没有。

| 阶段 | 大概用时 | 成果 |

|------|----------|------|

| 第一阶段 | 1小时 | 核心逻辑跑通,命令行就能用 |

| 第二阶段 | 45分钟 | 能检测到我在开什么应用了 |

| 第三阶段 | 1小时 | 猫咪终于跳出来了! |

| 第四阶段 | 45分钟 | 缩到托盘里,像个正经软件了 |

| 第五阶段 | 1小时 | 各种优化,毛玻璃、音乐什么的 |

| 总计 | 5小时 | 能发版了! |

-–

### 第一阶段:先把骨架搭起来(1小时)

这阶段啥 UI 都没做,就先把核心逻辑写了:

  1. 配置类:读 JSON 文件,把时间什么的配置读出来
  2. 时间追踪:每秒加一秒,到点就触发
  3. 主循环:跑起来看看能不能到点提醒

给大家看一下当时的雏形(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,到了就打印"该休息了"。

:joy: 说出来你可能不信,这最简陋的版本我居然用了半个小时!命令行打印倒计时也挺有内味儿的。

这阶段的收获:

  • 核心逻辑跑通了,后面都是往上加东西
  • 跟 AI 磨合了一下,知道怎么提问它给的代码质量最高
  • 搭好了目录结构,后面加文件也不乱

-–

### 第二阶段:让程序"看懂"我在干什么(45分钟)

现在要让程序能检测到我在使用什么应用了。

这部分我完全让 AI 带我飞,因为我也不知道 Windows API 怎么用:

我:“帮我写个 Python 函数,获取当前前台窗口的进程名,要兼容 Windows 和 macOS”

AI 吧嗒吧嗒就给我输出了,还贴心地分了两个文件:

  • windows.py:用 pywin32 和 psutil
  • macos.py:用 pyobjc 的 AppKit 框架

然后又让 AI 帮我写了个抽象基类,统一接口。

class BasePlatform(ABC):

@abstractmethod

def get_active_process_name(self):

pass

@abstractmethod

def get_active_window_title(self):

pass

:robot: 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 播放,这里踩了个大坑:

:warning: 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 真的比人强太多了…各种参数张口就来

-–

:light_bulb: 用 AI 写代码的一些心得

这次开发的代码都是 Trae SOLO 模式写的,聊点真实感受吧:

Trae SOLO 的优点真的很明显

  1. 不会的东西它会
  • 什么 Windows API、macOS 权限问题,我完全不懂,但 AI 能给你写出可运行的代码
  • 各种库的用法它都记得住,不用一遍一遍查文档
  1. 写样板代码飞快
  • 什么 get/set、什么配置类、什么基础框架,AI 写得又快又规范
  • 省下来的时间可以想更重要的事情
  1. 提供新思路
  • 遇到问题卡住的时候,使用Trae chat模式,它可能会给你一个完全不同的思路
  • 比如那个线程队列的问题,我一下没想到,但Trae SOLO模式秒出方案
  1. 代码生成精准可靠,大幅提升开发效率
  • Trae SOLO 提供的代码逻辑清晰、语法规范,直接复用即可快速实现功能
  • 针对 Tkinter 等框架能精准调用官方参数,给出的代码开箱即用
  1. 快速纠错改正
  • 面对复杂 bug,Trae SOLO 能快速梳理排查思路、精准定位问题根源
  • 无需自己盲目打日志、设断点,结合 Trae SOLO 的建议能快速修复问题

但 Trae SOLO 也不是万能的

  1. 项目需求和功能还是要人来决定
  • AI 可以帮你实现功能,但怎么组织代码、怎么分层、哪里要做抽象,这些它不擅长
  • 如果自身没有理清业务需求与整体设计思路,单纯依赖 AI 产出的代码会杂乱冗余,后期维护与迭代成本极高
  1. 前端界面最好一开始就确定好
  • 一方面,我们在一开始的时候,没有确定好前端界面的样式;另一方面,在开发过程中我们又不断的添加新功能。最后在调整界面布局的时候代码经常出错,AI写的代码就像在抽奖,代码不得不回滚了十几次。

我的 Trae SOLO 开发心法

  • :white_check_mark: 先想清楚架构,让AI设计好前端界面,再让 AI 填代码——架构乱了,AI 写得越多越糟糕
  • :white_check_mark: 把大任务拆成小问题——不要一上来就"帮我写个软件",要拆成"帮我写个读配置的类"
  • :white_check_mark: AI 写的代码一定要看一遍——不然你根本不知道它埋了什么坑
  • :white_check_mark: 遇到问题多换几种问法——这个方案不行就问问有没有别的方案
  • :cross_mark: 不要完全复制粘贴——至少看懂了再粘,不然出了问题你都不知道为啥

-–

:tada: 总结

5 小时,从 0 到 1,做出了一款自己会天天用的小工具,这种感觉真的很棒。

关于 AI Coding

我觉得 AI 现在的定位更像是一个"超强的初级程序员"——你让它写什么它都能写出来,但怎么组织、怎么设计、怎么排优先级,还是得人来。

但哪怕这样,效率提升也已经很夸张了。如果是纯手写,这个项目我估计得花两三天。

给想试试 Trae SOLO 写代码的朋友一点建议:

  • 不要怕,大胆用,大不了代码删了重写
  • 多换几种提问方式,多换几个模型,chat模式的回答质量差别很大
  • 代码一定要看一遍再用,不然出了问题你都看不懂
  • 项目目标一定要自己想清楚,这是 Trae SOLO 暂时替代不了的

希望这篇分享对大家有帮助~

:cat_face: 祝大家编码愉快,记得多休息哦!

1 个赞