一、我是谁,以及我遇到了什么问题
我是一个个人开发者,平时工作之余会写点 Python 桌面小工具自用。手上这个项目叫"AI 工具箱",是基于 customtkinter 写的一个桌面应用,左侧是 8 个工具的列表(文件扫描、时间管理、APK 安装器、edge 书签、todo 等),点击后右侧展示对应内容。我自己用了大概半年,零散加功能,没怎么整体看过代码。
最近打开用的时候发现两个问题,都很难受:
- 工具箱运行时,点击左侧任意一个工具,右侧永远不刷新——除了"APK 安装器"之外,其他 7 个点上去都纹丝不动。tkinter 也没报错,我一度以为是刷新问题,重启了好几次都没用。
- 表格区域是刺眼的纯白底,跟整个深色主题的界面格格不入;侧边栏、按钮、卡片之间配色也乱,看着不像同一个应用。
第一个问题是功能性问题,不修没法用;第二个是看着难受但能忍。拖了一阵子之后决定认真收拾一下。
二、我是怎么用 TraeCode 解决这件事的
使用模式:SOLO 模式(智能体自主执行 + 我在关键节点做决策)。
我没有一次性把三轮需求都丢进去,而是分了三轮,每轮一个明确目标。这样每轮都能验证、都能回滚。下面是三轮的完整过程。
第一轮|止血:修复"点左边不跳右边"
我给 TraeCode 的原话是:
解决目前工具箱点击左侧各个列表对应的内容,但是右侧不刷新新的问题。
TraeCode 没有急着改代码,而是先做了一轮诊断。它告诉我两个发现:
- 8 个工具里有 7 个在
setup_ui里用了ctk.CTkTreeview——但 customtkinter 从来没有提供过CTkTreeview这个组件。点击这些工具时,setup_ui直接抛AttributeError,被 tkinter 的回调机制静默吞掉,所以从界面上完全看不到错误。唯一能正常工作的"APK 安装器",是因为它恰好没用到 Treeview。 - 右下角那个"请从左侧选择一个工具"的占位符在所有工具显示前就已经打包好了,之后切换工具时从来没被移除过,所以新内容会被叠在它下面,看起来像"没刷新"。
定位清楚之后,TraeCode 给了修复方案:
- 新写一个
CTkTreeview转发类,基于ttk.Treeview封装,自动适配深色主题,通过__getattr__把 API 转发到内部 Treeview,额外显式转发configure和bind(这两个方法被 CTk 基类拦截了,__getattr__拿不到)。然后用ctk.CTkTreeview = CTkTreeview注册到 customtkinter 命名空间下——这样 7 个工具文件一行都不用改。 ContentArea的show_tool改成"先移除占位符、再销毁旧工具、再展示新工具",把占位符纳入生命周期管理。
最后 TraeCode 写了一个自动化测试脚本,模拟真实点击路径,依次切换全部 8 个工具,断言每次切换后右侧有且仅有 1 个内容子项。8 个工具全过。
第二轮|修面:让表格融入深色主题
第一轮修完功能正常了,但白底表格还是很刺眼。我给的提示是:
当前页面的视觉设计与其他页面存在明显冲突,特别是右侧的白色页面区域显得尤为不协调。请对该页面进行视觉一致性优化,确保其在色彩方案、排版风格、组件样式、间距规范等方面与其他页面保持统一。
TraeCode 立刻发现这是第一轮埋下的一个没完全做干净的尾巴:上一轮其实已经定义了 CTk.Treeview 深色样式,但从来没真正应用到 Treeview 控件上(缺 style="CTk.Treeview"),加上 Windows 默认的 vista ttk 主题不完全响应自定义配色,所以表格还是系统白底。
修复内容很集中:
self._treeview.configure(style="CTk.Treeview")把样式真正接上去style.theme_use("clam")切到 clam 主题完全接管配色(应用内只有这一处 ttk 控件,没有副作用)- 表体和表头统一改成
Microsoft YaHei UI,表头加粗 - 补充
cget转发——和configure、bind一样会被 CTk 基类拦截
这一轮 TraeCode 做了一件很关键的事:它不只改代码,还写了一个运行期断言 tree.cget("style") == "CTk.Treeview",并且断言样式背景值是 #2b2b2b。同时它让我把窗口置顶后再截图——之前一次截图被 IDE 前置窗口挡住了,验证等于没做。
最终肉眼确认:表格主体 #2b2b2b、表头 #333333、选中行高亮 #1f6aa5(和按钮蓝一致),白色区域彻底没了。
第三轮|整体 UI 美化 + 打包
白底问题解决后,整体观感还是有点乱——按钮、卡片、侧边栏的配色和留白都不统一。我给的提示是:
当前UI页面虽然已补充背景颜色,但整体视觉效果仍存在明显不协调问题。请对页面内容进行全面的UI美化与协调优化……另外,完成之后先打包一下。
这一轮 TraeCode 的做法是先全局通读,再分步改造:
- 先通读所有 8 个工具的 UI 代码,找出视觉不一致的点
- 建立统一设计规范——新增
Theme字典(颜色、字体、间距)+card/section_label助手函数,全部页面共享 - 改造基础结构——侧边栏重设计(层级、选中态、悬停、分类标签)、工具页头统一(图标 + 工具名 + 灰色描述)、内容区卡片化
- 逐个工具改造——8 个工具文件批量统一:区块容器换统一卡片、嵌套容器透明化、日志框统一字体、状态文字统一灰色、复选框行增加垂直呼吸间距
- 打包——
pyinstaller --onefile打包成单个 exe,做冒烟测试(启动 → 进程存活 → 关闭),替换根目录旧版
最终的设计规范数据:
| 项 | 值 |
|---|---|
| 窗口背景 | #1f1f21 |
| 侧边栏 | #19191b(更深,形成分区) |
| 卡片 | #2a2a2d(带描边 #3c3c41) |
| 主文本 | #eaeaec |
| 次要文本 | #9a9aa2 |
| 选中态 | #35435a |
| 悬停态 | #333338 |
| 字体 | Microsoft YaHei UI(页头 17 粗 / 区块 12 粗 / 正文 12 / 次要 11) |
| 表格 | 行高 28 + 斑马纹 + 表头深色 |
打包结果:AI工具箱.exe 31MB,冒烟测试通过,双击即用新版。
三、成果展示
最终交付的东西:
- 功能层面:8 个工具全部能正常切换渲染,无残留、无堆叠;表格插入/查询正常。
- 视觉层面:三层背景层次清晰(窗口 → 侧边栏 → 卡片);主次文本对比和谐;按钮蓝
#1f6aa5在选中态、强调色两处统一出现;斑马纹表格在多行数据下可读性明显提升。 - 交付物:根目录的
AI工具箱.exe(31MB,PyInstaller onefile)替换了旧版,本地双击即用,不需要 Python 环境。
整个过程没有改过任何工具文件的核心业务逻辑——只动了 app.py 的样式/转发层和 8 个工具文件的 UI 容器层,所有功能保持原样。
四、效率对比
以前手动做(没 SOLO 模式时):
- 8 个工具文件挨个翻,几百行 setup_ui 代码慢慢看,光定位问题就至少要 1-2 小时
- customtkinter 没有 CTkTreeview 这个事我可能不会立刻想到,大概率会以为是绑定事件没接好
- 占位符的问题更隐蔽,没报错,纯靠肉眼对比
- 表格白底:自己上网查 ttk 主题,试 vista/clam/alt,体验一遍才知道哪个响应自定义
- 打包:手动敲 pyinstaller 命令、找 spec 文件、试 onefile 模式
- 整个流程估计要 1-2 天
现在用 TraeCode SOLO 模式做:
- 第一轮(功能修复):从诊断到验证,AI 全程主导,我只看了几段关键代码确认方向
- 第二轮(视觉统一):TraeCode 直接点出是第一轮的尾巴问题,省去我来回翻 git diff
- 第三轮(美化 + 打包):通读所有 UI + 设计规范 + 改造 + 打包一次性串完
- 三轮全部加起来 半天内完成
最关键的不是省了多少时间,是少踩了那种"以为修好了实际没修好"的坑——每轮都有自动化断言或截图作为收尾验证标准,不是靠肉眼或者"看起来对就行"。
五、经验和技巧
- 修 Bug 时直接贴错误日志比搜 StackOverflow 快。这次
AttributeError: module 'customtkinter' has no attribute 'CTkTreeview'如果自己搜,大概率会绕到"自定义组件"的弯路里;丢给 TraeCode 它直接告诉你"这个类根本不存在",方向立刻就对了。 - 重构前先把项目作为 Workspace 给 AI。第三轮 TraeCode 不是上来就改样式,而是先通读所有 8 个工具的 UI,再制定设计规范——这种全局认知建立之后再下手,改动才不会把别的页面带坏。
- 视觉调整后用"断言 + 截图"双重验证,不要只靠肉眼。第二轮 TraeCode 写了
tree.cget("style") == "CTk.Treeview"断言,又让我置顶窗口重新截图——之前一次截图被 IDE 挡住,它主动让我重做。视觉问题最怕"截图没截到,结果以为生效了"。 - 大需求拆成多轮 SOLO,每轮一个目标。如果把"修 Bug + 统一视觉 + 整体美化 + 打包"一次性丢给 AI,中间任何一步出问题都很难回滚;拆成三轮后,每轮可以独立验证、独立决定是否继续。三轮迭代是合适的节奏。


