我用 TraeCode 三轮迭代,把一个半残的 customtkinter 工具箱修好、变美、还打成了 exe

一、我是谁,以及我遇到了什么问题

我是一个个人开发者,平时工作之余会写点 Python 桌面小工具自用。手上这个项目叫"AI 工具箱",是基于 customtkinter 写的一个桌面应用,左侧是 8 个工具的列表(文件扫描、时间管理、APK 安装器、edge 书签、todo 等),点击后右侧展示对应内容。我自己用了大概半年,零散加功能,没怎么整体看过代码。

最近打开用的时候发现两个问题,都很难受:

  1. 工具箱运行时,点击左侧任意一个工具,右侧永远不刷新——除了"APK 安装器"之外,其他 7 个点上去都纹丝不动。tkinter 也没报错,我一度以为是刷新问题,重启了好几次都没用。
  2. 表格区域是刺眼的纯白底,跟整个深色主题的界面格格不入;侧边栏、按钮、卡片之间配色也乱,看着不像同一个应用。

第一个问题是功能性问题,不修没法用;第二个是看着难受但能忍。拖了一阵子之后决定认真收拾一下。

二、我是怎么用 TraeCode 解决这件事的

使用模式:SOLO 模式(智能体自主执行 + 我在关键节点做决策)

我没有一次性把三轮需求都丢进去,而是分了三轮,每轮一个明确目标。这样每轮都能验证、都能回滚。下面是三轮的完整过程。

第一轮|止血:修复"点左边不跳右边"

我给 TraeCode 的原话是:

解决目前工具箱点击左侧各个列表对应的内容,但是右侧不刷新新的问题。

TraeCode 没有急着改代码,而是先做了一轮诊断。它告诉我两个发现:

  1. 8 个工具里有 7 个在 setup_ui 里用了 ctk.CTkTreeview——但 customtkinter 从来没有提供过 CTkTreeview 这个组件。点击这些工具时,setup_ui 直接抛 AttributeError,被 tkinter 的回调机制静默吞掉,所以从界面上完全看不到错误。唯一能正常工作的"APK 安装器",是因为它恰好没用到 Treeview。
  2. 右下角那个"请从左侧选择一个工具"的占位符在所有工具显示前就已经打包好了,之后切换工具时从来没被移除过,所以新内容会被叠在它下面,看起来像"没刷新"。

定位清楚之后,TraeCode 给了修复方案:

  • 新写一个 CTkTreeview 转发类,基于 ttk.Treeview 封装,自动适配深色主题,通过 __getattr__ 把 API 转发到内部 Treeview,额外显式转发 configurebind(这两个方法被 CTk 基类拦截了,__getattr__ 拿不到)。然后用 ctk.CTkTreeview = CTkTreeview 注册到 customtkinter 命名空间下——这样 7 个工具文件一行都不用改
  • ContentAreashow_tool 改成"先移除占位符、再销毁旧工具、再展示新工具",把占位符纳入生命周期管理。

最后 TraeCode 写了一个自动化测试脚本,模拟真实点击路径,依次切换全部 8 个工具,断言每次切换后右侧有且仅有 1 个内容子项。8 个工具全过

第二轮|修面:让表格融入深色主题

第一轮修完功能正常了,但白底表格还是很刺眼。我给的提示是:

当前页面的视觉设计与其他页面存在明显冲突,特别是右侧的白色页面区域显得尤为不协调。请对该页面进行视觉一致性优化,确保其在色彩方案、排版风格、组件样式、间距规范等方面与其他页面保持统一。

TraeCode 立刻发现这是第一轮埋下的一个没完全做干净的尾巴:上一轮其实已经定义了 CTk.Treeview 深色样式,但从来没真正应用到 Treeview 控件上(缺 style="CTk.Treeview"),加上 Windows 默认的 vista ttk 主题不完全响应自定义配色,所以表格还是系统白底。

修复内容很集中:

  1. self._treeview.configure(style="CTk.Treeview") 把样式真正接上去
  2. style.theme_use("clam") 切到 clam 主题完全接管配色(应用内只有这一处 ttk 控件,没有副作用)
  3. 表体和表头统一改成 Microsoft YaHei UI,表头加粗
  4. 补充 cget 转发——和 configurebind 一样会被 CTk 基类拦截

这一轮 TraeCode 做了一件很关键的事:它不只改代码,还写了一个运行期断言 tree.cget("style") == "CTk.Treeview",并且断言样式背景值是 #2b2b2b。同时它让我把窗口置顶后再截图——之前一次截图被 IDE 前置窗口挡住了,验证等于没做。

最终肉眼确认:表格主体 #2b2b2b、表头 #333333、选中行高亮 #1f6aa5(和按钮蓝一致),白色区域彻底没了。

第三轮|整体 UI 美化 + 打包

白底问题解决后,整体观感还是有点乱——按钮、卡片、侧边栏的配色和留白都不统一。我给的提示是:

当前UI页面虽然已补充背景颜色,但整体视觉效果仍存在明显不协调问题。请对页面内容进行全面的UI美化与协调优化……另外,完成之后先打包一下。

这一轮 TraeCode 的做法是先全局通读,再分步改造

  1. 先通读所有 8 个工具的 UI 代码,找出视觉不一致的点
  2. 建立统一设计规范——新增 Theme 字典(颜色、字体、间距)+ card / section_label 助手函数,全部页面共享
  3. 改造基础结构——侧边栏重设计(层级、选中态、悬停、分类标签)、工具页头统一(图标 + 工具名 + 灰色描述)、内容区卡片化
  4. 逐个工具改造——8 个工具文件批量统一:区块容器换统一卡片、嵌套容器透明化、日志框统一字体、状态文字统一灰色、复选框行增加垂直呼吸间距
  5. 打包——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 + 设计规范 + 改造 + 打包一次性串完
  • 三轮全部加起来 半天内完成

最关键的不是省了多少时间,是少踩了那种"以为修好了实际没修好"的坑——每轮都有自动化断言或截图作为收尾验证标准,不是靠肉眼或者"看起来对就行"。

五、经验和技巧

  1. 修 Bug 时直接贴错误日志比搜 StackOverflow 快。这次 AttributeError: module 'customtkinter' has no attribute 'CTkTreeview' 如果自己搜,大概率会绕到"自定义组件"的弯路里;丢给 TraeCode 它直接告诉你"这个类根本不存在",方向立刻就对了。
  2. 重构前先把项目作为 Workspace 给 AI。第三轮 TraeCode 不是上来就改样式,而是先通读所有 8 个工具的 UI,再制定设计规范——这种全局认知建立之后再下手,改动才不会把别的页面带坏。
  3. 视觉调整后用"断言 + 截图"双重验证,不要只靠肉眼。第二轮 TraeCode 写了 tree.cget("style") == "CTk.Treeview" 断言,又让我置顶窗口重新截图——之前一次截图被 IDE 挡住,它主动让我重做。视觉问题最怕"截图没截到,结果以为生效了"。
  4. 大需求拆成多轮 SOLO,每轮一个目标。如果把"修 Bug + 统一视觉 + 整体美化 + 打包"一次性丢给 AI,中间任何一步出问题都很难回滚;拆成三轮后,每轮可以独立验证、独立决定是否继续。三轮迭代是合适的节奏。

TraeCode的100种用法

1 个赞