第14讲桌面待办案例 本地任务:871bf6f6-827a-4ae3-933d-7a5fa93b33c4 以下为本轮通过电脑界面实际发送的6轮完整提示词。 第1轮 为《AI时代的Python课》第14讲准备一个可复现的真实桌面ToDoList,沿用第13讲的需求→上下文→计划→分步实现→运行调试→测试→迭代→整理交付流程。 当前工作目录是todo-ai-workflow;新案例只允许放入lesson14_desktop子文件夹(还没有代码)。lesson14_python和第13讲已经录制,其他目录只能保持不变,不读取个人任务数据。 本轮只整理需求、检查环境并给出分步计划,不创建应用代码,不安装依赖。优先Python 3.10+、tkinter/ttk图形界面和JSON本地保存。这必须是独立桌面窗口,不是命令行、网页、HTML或浏览器套壳。 基础版:中文界面,输入框新增任务、列表查看、选中后标记完成/恢复、选中后确认删除、完成率统计,关闭程序再次启动后任务和状态仍在。任务名称去首尾空格且不能为空,损坏JSON要明确报错且保留原文件。界面清楚,宽度约900、高度约600,主要文字用黑色,留白适度。 迭代只增加一项“全部/未完成/已完成”筛选,不能删除或改写被筛掉的任务。 先实际检查本机有哪些合适的Python、tkinter能否导入、Tcl/Tk版本;如可用,创建一个短暂测试窗口并自动关闭,验证Tk能够真正初始化。报告使用的解释器绝对路径、版本和实际结果。环境不可用就如实说明,不安装或升级系统工具。 请复述需求,列出拟创建文件及职责,安排两次可检查的开发步骤:基础桌面版,再单独增加筛选。给出操作与预期结果对应的验收清单。计划等我审核通过后再写代码。 第2轮 审核计划后有以下调整,请先落实这些调整,再只实现基础桌面版,暂不加筛选。 1. 任务只包含id、title、completed,不增加创建时间等额外字段。核心逻辑与窗口分开:todo_core.py负责增删改查和JSON,todo_app.py负责tkinter/ttk窗口,test_todo.py负责unittest,README.md写运行方式。默认数据为本项目data/tasks.json;提供--data指定独立演示文件,演示不能碰真实数据。 2. 我已在本机官方IDLE 3.11.9里实际完成tk.Tk初始化且正常返回,输出解释器为/Library/Frameworks/Python.framework/Versions/3.11/bin/python3.11,Tk8.6。请优先核对并使用这个解释器。你刚才3.12.12导入成功但Tk初始化崩溃,只能记为该环境GUI未通过,不能声称真实桌面必然正常。 3. 先创建unittest并运行,保留真实失败,再实现最小核心让测试通过。覆盖新增去空格、空名拒绝、完成/恢复、删除、未知id、JSON读回、非法和空白JSON保留原文件、写入失败不破坏原任务。不要把测试计数或输出预先写死。 4. 窗口900x600左右,中文黑色文字,顶部输入与添加,中间编号/名称/状态列表,底部标记完成、恢复未完成、删除和全量统计。未选中时相关按钮不可误操作,删除需确认。每次有效变更即保存。数据损坏时明确提示并禁止覆盖。不要默认塞入样例任务。 5. 全部新文件仅写到lesson14_desktop。已有lesson14_python、第13讲、第15/16讲及个人数据保持不变。不复制或修改那些项目。当前新目录尚不存在时应明确说待创建。 完成基础版后运行核心测试及语法检查,用独立演示路径启动真实桌面窗口,报告实际命令、解释器、结果与仍待人工验证的项目,不用静态图片代替软件。把实际命令与失败/修复记录保存到本目录ACCEPTANCE.md。此轮不要做筛选、打包免安装程序、网页或发布。 第3轮 不需要清理或删除演示文件,请保留。现在有真实的独立验收失败,需要限定修复,暂不加筛选。 我在lesson14_desktop/test_desktop_contract.py放入了独立验收(只读,不得修改这个文件)。目前运行5项检查:跨进程读回通过;另外出现8个失败断言。 复现:mock todo_core.os.replace抛PermissionError后,add_task、complete_task、delete_task没有抛OSError,且内存已经改变;加载{}、空标题、completed为字符串、title为数字、id为None的任务也没有拒绝。 预期:保存失败必须向调用者报告OSError,磁盘旧文件和内存旧任务都保持不变;GUI显示失败,不显示已保存;非法字段在加载时被ValueError拒绝且保留文件。 请保持TodoCore接口和任务字段不变,只修复保存事务、字段校验和GUI错误提示。原来的“写失败静默忽略”测试本身不符合需求,应改为mock失败后检查回滚,不改文件系统权限。 运行python3 -B -m unittest test_todo test_desktop_contract -v。报告实际通过数和退出码,补充ACCEPTANCE.md,保留初次失败与本次修复。不要安装依赖或改变系统安全设置,不把未观察的GUI项目写成已通过。 第4轮 限定修复后的31项自动检查已在外部重新运行通过,test_desktop_contract.py与原件哈希一致。我已在真实桌面用官方Python3.11启动todo_app.py,并通过输入框新增了课堂任务。当前Comate自身运行环境的GUI初始化仍失败,请保留这个边界。 现在进入第二轮迭代,先只给简短方案,不修改文件: 1. 保存当前基础版为可独立解压的源码检查点,只含必要源码、测试、README与ACCEPTANCE,不含data、缓存、日志。 2. 增加“全部/未完成/已完成”筛选,只改变显示,不改变核心数据;统计仍计算全部任务。 3. 改善必要的可用性:编号列不必占290像素,收窄到70左右,名称列占主要宽度;在列表获得键盘焦点且没有选中行时选择第一项,支持Tab、方向键、空格操作按钮,避免只能依赖鼠标;列表刷新后正确更新按钮状态。 4. 不扩展业务字段,不增加其他功能,不修改TodoCore接口和其他目录。 给出拟改文件、筛选和键盘导航的验证方法,以及哪些旧功能要回归,等我确认后再实施。 第5轮 方案通过,按这个范围实施。审核补充两点: 1. Tkinter没有通用的taborder控件属性,请使用takefocus、控件创建顺序或明确的焦点处理,不设置不存在的参数;列表获得焦点时同时设置tree.focus与selection_set到第一项,方向键才能接着移动。 2. 检查点请放lesson14_desktop/checkpoints/v1_basic.zip,不写到其他目录。README和ACCEPTANCE可以更新说明,但不改变核心接口或独立验收文件。给筛选增加不依赖真实GUI初始化的自动检查,不能用它声称已完成桌面点击验收。 请先保存基础版检查点,再只增加状态筛选与必要的键盘导航、列宽和按钮刷新。运行全部现有检查和新增筛选检查,保留真实结果,不清理或删除数据。完成后报告可在本机运行的入口和最终文件清单。 第6轮 收尾前再修正一个测试问题并整理交付,请不要修改产品代码。 当前test_filter.py自己复制了visible函数,这只能证明复制的算法,不能证明todo_app.py的真实筛选。请改为直接检查真实TodoApp._visible_tasks:可以用TodoApp.__new__创建不初始化Tk的对象,设置真实core与_filter后调用真实方法。保留9项检查含义,不复制筛选算法,不创建Tk窗口。只改test_filter.py以及必要的说明。 实际桌面操作已在外部用/Library/Frameworks/Python.framework/Versions/3.11/bin/python3.11完成:输入框新增任务;基础数据在关闭后重新启动时仍在;通过Tab/方向键/空格完成与恢复;取消删除保留3条,确认删除独立测试任务后剩两条;第一条已完成、第二条未完成,完成率50%;已完成筛选只显示第一条、未完成筛选只显示第二条,统计仍为全量50%;空名称弹出“任务名称不能为空”。这些是电脑上实际窗口的键盘操作和原生确认对话框检查,不要写成你在Comate运行环境里做了GUI测试,也不要写鼠标逐项已验证。 请运行全部40项检查,记录实际结果。更新README与ACCEPTANCE,区分自动检查、本机GUI键盘检查和仍未验证的GUI损坏文件弹窗、鼠标逐项操作、Windows兼容性。Tk初始化在你的运行环境中仍有限制,不改变安全设置。 然后创建checkpoints/v2_filter.zip,只含当前必要源码、三个测试文件、README和ACCEPTANCE;不要包含data、缓存、日志或其他zip。不删除任何演示数据,不修改独立test_desktop_contract.py或核心与GUI文件。说明源码包仍需要Python与Tk,不是免安装软件。 # 第14讲桌面待办案例验证记录 验证日期为2026年10月28日。应用代码通过电脑上的WPS Comate本地任务生成与修复;自动检查由Comate执行后,再使用本机Python独立复核。桌面窗口的观察和操作通过电脑界面完成,不使用网页预览或预设结果代替。 本地任务编号为`871bf6f6-827a-4ae3-933d-7a5fa93b33c4`。六轮实际发送的完整提示词已导出至`桌面案例实测/Comate实际发送提示词.txt`。课堂用的简明模板与这些实际制作记录分开保存。 ## 环境与启动 桌面运行环境为本机官方Python 3.11.9,Tk 8.6。实际运行命令: ```bash cd todo-ai-workflow/lesson14_desktop /Library/Frameworks/Python.framework/Versions/3.11/bin/python3.11 todo_app.py --data data/classroom-20261028.json ``` 本次Comate内置Python 3.12.12能导入tkinter,但Tk窗口初始化失败;调用本机官方解释器时也遇到工具环境访问限制。因此课堂应明确采用“Comate生成与修改代码,本机Python启动窗口”的运行路线,不声称是在Comate内置执行环境中完成了GUI操作。 没有安装依赖,没有更改系统权限、安全设置或网络设置。案例是需要Python和Tk的源码应用,不是免安装程序。 ## 实际开发过程 1. 在Comate中新建本地日常任务,选择`todo-ai-workflow`工作目录,先提交需求、环境检查与计划请求。 2. 审核回复,去掉额外字段,明确文件职责、独立演示数据与两轮实现范围。 3. 由Comate先创建检查再实现基础版。初始空壳的26项检查中,3项通过,其余23项失败或报错;完成实现后,26项通过。 4. 独立检查进一步发现保存错误被忽略、错误字段未被拒绝的问题。5项独立检查出现8个失败断言。将具体操作、预期和实际结果提交Comate限定修复。 5. 修复后,26项项目检查和5项独立检查通过;独立检查文件与原件哈希一致,没有靠修改独立断言获得通过。 6. 保存基础版检查点,先让Comate列筛选迭代方案,再审核并批准。只增加筛选、必要的键盘导航和列宽调整。 7. 复核发现第一份筛选测试复制了筛选算法,要求Comate改为调用真实`TodoApp._visible_tasks`方法,不初始化Tk,也不复制被测算法。 8. 检查两个源码版本,排除运行数据、缓存和日志,整理启动说明与验收记录。 ## 最终自动检查 使用本机实际运行桌面的同一个解释器复核: ```bash /Library/Frameworks/Python.framework/Versions/3.11/bin/python3.11 -B -m unittest discover -v ``` 结果为40项通过,退出码0。其中核心单元测试26项、独立验收5项、真实筛选方法测试9项。覆盖新增、去空格、空名拒绝、完成、恢复、删除、JSON读回、错误JSON保护、保存失败回滚和筛选不改动数据等行为。 独立检查通过新Python进程重新读取同一份临时数据,核对两条任务、完成一条与50%的完成率。不是仅在同一进程重新创建对象。 课程现有的75项检查也已重新通过。第13讲线上预览使用的HTML哈希仍为: ```text c8e4542e00dc44bfb37e23418721c5f37df0664a8cb11c7d03a7a804c81e373f ``` 上述案例验证阶段没有覆盖第13讲或当时的第14讲HTML、逐字稿。随后确认方案后,第14讲课件与逐字稿已单独重制;正式材料检查见《课件制作验收.md》。第13讲仍保持不变。 ## 真实桌面操作 以下操作在官方Python 3.11.9实际打开的桌面窗口中完成,主要使用标准键盘导航;确认和警告对话框通过原生按钮操作。 | 检查 | 实际观察 | | --- | --- | | 新增 | 输入“完成Python练习”和“整理课堂笔记”,两条任务出现在列表中 | | 完成 | 选择第一条并标记完成,状态更新;移除独立删除测试任务后,统计为1/2与50% | | 恢复 | 第一条恢复后,两条均为未完成,完成率0%;再次标记后回到50% | | 取消删除 | 针对另建的“删除测试用任务”打开确认框,选择No,三条任务均保留 | | 确认删除 | 再次确认删除该测试任务,剩余两条正式演示任务保留 | | 已完成筛选 | 只显示“完成Python练习”,全量统计仍为1/2与50% | | 未完成筛选 | 只显示“整理课堂笔记”,全量统计仍为1/2与50% | | 全部筛选 | 两条任务重新出现,说明隐藏没有删除数据 | | 空名称 | 空输入触发“任务名称不能为空”警告,任务未增加 | | 关闭后重开 | 正常退出原进程,另起进程使用同一独立文件启动,仍有两条任务与50%完成率 | 演示数据只写入新案例的`data/classroom-20261028.json`。没有读取或修改个人任务,也没有打包这份演示数据。 ## 截图 - `桌面案例实测/01-基础桌面窗口.png` - `桌面案例实测/02-两条任务完成一条.png` - `桌面案例实测/03-只看已完成.png` - `桌面案例实测/04-只看未完成.png` - `桌面案例实测/05-空名称被拒绝.png` - `桌面案例实测/06-关闭重开后仍为50.png` - `桌面案例实测/07-Comate最终验收.png` ## 验证边界 尚未逐项验证鼠标操作、GUI损坏文件弹窗和Windows运行效果。损坏JSON的数据保护已经过自动检查,但不等同于已经观察过对应弹窗。完整桌面操作路线已用键盘复现,录制时可沿用这一方法。 基础版检查点保留了其当时的文件和验收状态;完整的键盘导航与筛选操作验证针对最终筛选版。15分钟指课程成片的建议节奏,AI生成等待时间不固定,可使用真实执行记录或对等待部分加速,不伪装成全程实时完成。