把桌宠拆成可验证的三个交付阶段
会动的桌面角色、能被用户控制的应用、能在另一台电脑运行的安装包,是三个阶段。先把本体做稳,再换形象与增加互动,最后打包分享,能避免同时排查素材、窗口和依赖问题。本文用原创的“纸盒小狐狸”作设计案例:默认离线、可以拖动、右键暂停和退出、闲置时轻轻眨眼。案例描述的是开发与验收方案,没有声称已经生成或运行 exe。
开始写明目标系统与架构、Python 和 GUI 版本、素材许可、是否联网、配置保存位置,以及怎样彻底退出。第一版只做一只角色,不自动开机启动、不读取其他应用。聊天是可选扩展,先用固定本地台词完成交互。这样即使没有模型账号,核心功能仍能验证。给朋友分享前,另外写清支持的 Windows 版本与已实际测试的环境,不能从自己电脑能运行推断所有电脑可用。
第一阶段:选参考项目,跑通透明窗口与动画
先检索公开项目,再判断是否值得复用。oyxdsg/Deepseek-pet 的说明展示了 Python、PySide6、素材目录和打包路径,仓库标示 MIT,可作为结构参考;本次没有执行其代码,不能把维护能力或跨平台稳定性视为已证实。选择时查看实际源码、依赖、最近变更、问题记录和许可证,素材授权另查。它比只有效果截图的项目更容易评估,但仍需在隔离项目中验证。Qt/PySide6 的依赖条款也不能用项目自己的 MIT 声明代替。
建立项目专用虚拟环境,记录解释器与依赖版本。用当前解释器运行 pip,避免把包装到另一个 Python。先显示一个普通窗口与一张已知正常的 PNG,再依次启用无边框、透明背景与置顶。Qt 文档说明 Windows 上半透明顶层窗口需要相应透明属性及无边框标志;仅给图片加 alpha 通道并不保证整个窗口透明。先确认空白区域真的透明,再处理动画,以免把窗口背景误认为素材黑边。
纸盒小狐狸只定义 idle、blink、dragged 三个状态。定时器推进当前帧,不用阻塞 GUI 的循环等待。切换状态时明确下一帧从哪里开始;拖动期间暂停自动移动,松开后回到静止。右键菜单始终保留暂停、重置位置和退出,避免角色被拖出屏幕后只能结束进程。多显示器坐标、缩放和任务栏位置要单独检查,不把主屏幕的宽高当作整个桌面边界。
本阶段产物是可从源码启动的最小程序、版本记录和一张状态转换表。验收时连续切换状态、拖动到各个边缘、暂停再恢复并退出。记录真实 CPU、内存和观察时长;没有测量就不写“零占用”。如果窗口遮挡工作,让用户能隐藏或降低干扰,而不是用更多自动动作掩盖缺少控制的问题。
第二阶段:更换形象,明确点击与对话边界
替换像素素材时,先约定画布大小、脚底基线、透明边距、帧命名和顺序。小狐狸的8帧待机使用相同画布,眨眼动作不要突然变成另一种缩放。把帧列表、速度和循环规则放在清晰的素材清单里,检查缺帧、重复帧和错误扩展名。放大像素图时选择适合画风的采样方式,并在目标缩放比例下看实际效果,不能只看绘图软件中的原图。
单击与拖动需要区分:按下记录位置,超过约定移动阈值才当作拖动;松开时如果发生拖动就不同时触发台词。动画状态和业务状态分开,气泡关闭不应改变角色保存的位置。为文字气泡处理长句、换行和屏幕边界,给固定台词准备中文与英文样例。系统字体缺失时应有备用,角色素材也应有可见的缺失提示而不是直接崩溃。
如需模型聊天,先设计关闭联网时的行为。请求在非阻塞任务中进行,设置超时、取消、重复点击控制和费用上限;界面显示正在请求及失败结果,不能因等待网络而卡住拖动。只发送用户明确提交的对话,不默认读取剪贴板、屏幕或文件。模型回复仅作为显示文本,不当作系统命令。对话保存与删除应有明确设置,分享包中不能带真实历史、日志或 API key。
API 密钥不应硬编码进源码或 exe。让使用者在自己的环境中配置,提示缺少配置时继续使用离线功能。打包不能把秘密变得不可恢复,也不能把提供商计费说成“技能免费所以聊天免费”。先用本地模拟响应测通成功、超时和取消,再在得到相应授权与预算后接真实服务。此阶段交付素材清单、交互规则、离线测试记录与网络扩展说明。
第三阶段:从源码到可分享的 Windows 包
源码运行成功后,先用干净环境构建 onedir 目录包,保留终端或日志方便定位错误,再考虑面向用户的无控制台版本。PyInstaller 会收集解释器与依赖,所以体积不能只按脚本大小估算。构建应对应目标系统与架构,不能默认在其他操作系统生成一个 exe 就覆盖全部 Windows 环境。使用项目的 .spec 或构建脚本记录资源、图标及必需模块,不靠记忆重复输入参数。
资源路径应依据程序或模块位置解析,并按打包配置放到同样的相对位置,不能依赖启动时的当前目录。用户设置和聊天记录放在适当的用户可写目录,不写进安装资源或临时解包目录。把构建放在全新环境中复现,先排除开发环境顺带提供的依赖,再检查动态导入与 GUI 插件是否齐全。不要为缩小体积随意删除还没验证用途的运行库。
onefile 便于传递单个文件,但不是“免杀开关”。官方文档说明它通常在启动时解压支持文件到临时目录,并建议先验证目录包。原文把 onefile 与避免临时释放并列为降低误报的办法,不能直接照搬。数字签名可以帮助确认发布者,却不能保证没有告警。遇到检测先保存报告、核查构建依赖与产物,必要时走厂商误报复核;不要要求朋友关闭安全软件或把未知程序加白名单来证明成功。
给朋友的是整个所需目录或完整发布包,并附版本、来源、依赖许可、使用说明和校验值。用没有安装开发依赖的测试环境验证首次启动、素材加载、中文路径、空格路径、设置保存、断网、关闭及再次启动。测试中不得夹带个人配置。只有实际走过的环境才写进支持列表,尚未覆盖的系统明确标注。能双击启动只是验收开头,能暂停、退出和恢复配置同样重要。
可验证的 Skill 只放在匹配的步骤
本次目录搜索没有得到与原文桌宠开发和 PyInstaller 技能名称对应的可核验详情,因此不提供猜测链接。主体窗口、帧动画与打包操作使用上面公开项目及官方文档作为参考,未来目录新增对应条目后再评估来源、依赖与产物,不能靠安装量替代匹配。
Canvas Design 可用于前期原创静态角色设定板或说明卡的 PDF、PNG。给定尺寸、允许素材和输出位置后检查成图。它不保证像素帧连续、不会创建桌面窗口,也不负责 exe。需要逐帧素材时另做绘制与动作检查,不能把静态角色板直接称为可用动画包。
Writing Guidelines 适合分享前审阅技术使用说明:环境要求、启动入口、暂停退出、配置位置、常见故障和具体文件引用。它需要待审阅文件及相关规则来源,职责是表达清楚,不是扫描二进制或验证 GUI。来源检查、静态扫描和实际运行证据仍应分开记录。
实操请求、排错与 FAQ
给 Agent 的首轮请求可写成:“规划 Windows 上的离线纸盒小狐狸桌宠。先给状态表、素材规格、项目结构和依赖说明;核心仅含待机、眨眼、拖动、暂停和退出。不接模型、不设置自启动。确认最小程序能从源码运行后,再提出 PyInstaller 目录包方案,并列出未验证事项。”分阶段产物可以逐项检查,避免一句“做完整桌宠”就把未知外部服务和发布一起带进来。
窗口不透明,先用单张正确 alpha PNG 排除素材,再查 Qt 窗口属性与绘制背景;不要一开始就添加平台底层补丁。角色抖动,核对画布、基线和缩放;动作卡住,检查 GUI 线程是否被睡眠或网络占用。源码正常而 exe 缺图片,核对资源收集与定位;双击无反应,先用带控制台的诊断包获取异常,再回到最小失败样例。气泡跑到屏幕外,检查目标显示器的可用区域及缩放坐标。
零基础能做吗?可以从有限功能和清楚模板开始,但仍需要理解启动、依赖和错误日志,不能承诺复制即成功。必须用 Python 吗?不是,选择团队能维护、目标系统支持的 GUI 栈;本文仅讨论 Python 路线。exe 大就有问题吗?解释器与 GUI 依赖会增加体积,应根据干净构建的组成判断。能保证不报毒吗?不能,验收与来源说明不等于安全认证。能加聊天吗?可以作为可选扩展,先处理授权、密钥、费用与离线降级。
本篇保留原文中英文来源,并参考 Deepseek-pet 仓库、Qt QWidget 透明窗口文档、PyInstaller 打包原理与运行时资源定位文档。纸盒小狐狸是原创教学案例,不是已构建产品。交付记录应包含源码、素材权限、构建配置、实际测试环境与已知限制,后续改素材或升级依赖时重新验收。