Python实战篇:VScode+CodeX+WindowsPowerShell 开发桌面应用小工具Piggy Nap 小猪定时关机助手开发方案(PySide6)
Piggy Nap 小猪定时关机助手开发方案
1. 项目概述
1.1 中文名称
小猪定时关机助手
1.2 英文名称
Piggy Nap
1.3 名称定位
不采用直译式英文名,例如:
Pig Shutdown Assistant
而采用更自然、更有记忆点的英文品牌名:
Piggy Nap
该名称的含义更接近:
小猪打盹
让电脑休息一会儿
睡前自动关机小工具
1.4 推荐展示方式
软件对外展示建议统一使用:
Piggy Nap
小猪定时关机助手
窗口标题建议:
Piggy Nap - 小猪定时关机助手
最终 exe 文件名建议:
PiggyNap.exe
工程目录名建议:
piggy_nap
2. 软件定位
Piggy Nap 是一款基于 Python + PySide6 / Qt6 开发的 Win10 / Win11 桌面定时关机小工具。
软件采用 粉色小猪卡通风格,支持:
- 快捷倒计时关机;
- 自定义时间关机;
- 倒计时显示;
- 取消自动关机;
- 系统托盘;
- 开机自启动;
- 普通关机 / 强制关机切换;
- 关机前提醒;
- 测试模式,便于开发调试。
项目目标不是做复杂的系统管理工具,而是做一个:
简单、可爱、稳定、容易打包、双击就能用的 Windows 桌面小工具。
3. 已确认需求
| 序号 | 项目 | 需求 |
|---|---|---|
| 1 | 开发语言 | Python |
| 2 | GUI 框架 | PySide6 / Qt6 |
| 3 | 中文名称 | 小猪定时关机助手 |
| 4 | 英文名称 | Piggy Nap |
| 5 | 目标系统 | Windows 10 / Windows 11 |
| 6 | 系统架构 | 64 位 |
| 7 | 快捷按钮 | 10 分钟 / 30 分钟 / 1 小时 / 2 小时 |
| 8 | 自定义时间 | 支持选择具体时间 |
| 9 | 倒计时显示 | 需要 |
| 10 | 托盘功能 | 第一版实现 |
| 11 | 开机自启动 | 第一版实现 |
| 12 | 界面风格 | 粉色小猪卡通风格 |
| 13 | 素材原则 | 原创小猪素材,不直接使用小猪佩奇官方素材 |
| 14 | 关机方式 | 支持普通关机和强制关机 |
| 15 | 关机提醒 | 建议加入关机前提醒 |
| 16 | 调试保护 | 建议加入测试模式 |
4. 风格与版权边界
4.1 推荐风格
软件视觉风格建议为:
粉色小猪卡通风格
视觉元素可以包括:
- 粉色小猪;
- 睡帽;
- 月亮;
- 星星;
- 云朵;
- Zzz 睡眠符号;
- 柔和圆角按钮;
- 儿童绘本风格背景。
4.2 不建议使用的内容
为了降低版权风险,不建议直接使用:
- 小猪佩奇官方图片;
- Peppa Pig 名称;
- 官方 Logo;
- 官方角色造型;
- 动画截图;
- 官方字体;
- 官方配色和构图的高度仿制设计。
4.3 推荐表述
对外宣传建议使用:
粉色小猪卡通风格
而不是:
小猪佩奇风格
这样既保留了可爱、亲和、童趣的方向,又能避免明显的版权风险。
5. 软件图标设计建议
5.1 图标主题
Piggy Nap 的图标建议设计为:
一只原创粉色小猪 + 睡帽 + 月亮 + Zzz
图标应该一眼传达两个信息:
- 小猪;
- 睡觉 / 休息 / 关机。
5.2 图标关键词
后续如果使用 AI 生成图标或请设计师制作,可以使用以下关键词:
pink pig
sleeping pig
sleepy piglet
moon
zzz
bedtime
soft rounded icon
cute desktop app icon
cartoon pig icon
5.3 图标尺寸建议
| 用途 | 建议尺寸 |
|---|---|
| exe 图标 | .ico 多尺寸 |
| 窗口左上角图标 | 32 × 32 |
| 系统托盘图标 | 16 × 16 / 32 × 32 |
| 主界面 Logo | 128 × 128 / 256 × 256 |
| GitHub README 展示图 | 512 × 512 |
6. 功能范围
6.1 第一版实现功能
| 功能 | 是否实现 | 说明 |
|---|---|---|
| 单窗口主界面 | 是 | 所有功能集中在一个窗口 |
| 10 分钟后关机 | 是 | 快捷按钮 |
| 30 分钟后关机 | 是 | 快捷按钮 |
| 1 小时后关机 | 是 | 快捷按钮 |
| 2 小时后关机 | 是 | 快捷按钮 |
| 自定义时间关机 | 是 | 例如 23:30 自动关机 |
| 倒计时显示 | 是 | 每秒刷新剩余时间 |
| 设置自动关机 | 是 | 调用 Windows shutdown 命令 |
| 取消自动关机 | 是 | 调用 shutdown /a |
| 普通关机 | 是 | shutdown /s /t 秒数 |
| 强制关机 | 是 | shutdown /s /f /t 秒数 |
| 强制关机开关 | 是 | 通过复选框控制 |
| 关机前提醒 | 建议实现 | 关机前 60 秒提醒 |
| 系统托盘 | 是 | 支持最小化到托盘 |
| 托盘快捷菜单 | 是 | 可快速设置或取消关机 |
| 开机自启动 | 是 | 用户手动勾选 |
| 测试模式 | 建议实现 | 防止开发调试时误关机 |
| 粉色小猪卡通 UI | 是 | QSS + 原创素材 |
| PyInstaller 打包 | 是 | 生成 exe |
6.2 第一版暂不实现功能
| 功能 | 原因 |
|---|---|
| 多语言切换 | 第一版没有必要 |
| 网络同步时间 | 本地系统时间已够用 |
| 用户登录系统 | 不需要 |
| 云端配置 | 不需要 |
| 复杂动画 | 增加开发成本 |
| 多个关机计划 | 第一版只保留一个计划 |
| 远程控制关机 | 涉及安全风险,暂不做 |
| 软件自动更新 | 第一版暂不需要 |
| 安装包 | 第一版优先单 exe,后续再做安装包 |
7. 关机实现原理
7.1 Windows shutdown 命令
Windows 自带 shutdown 命令,可以直接用于定时关机。
普通关机:
shutdown /s /t 3600
含义:
3600 秒后关机
强制关机:
shutdown /s /f /t 3600
取消关机:
shutdown /a
7.2 参数说明
| 参数 | 含义 |
|---|---|
/s | 关闭计算机 |
/f | 强制关闭正在运行的应用程序 |
/t | 设置倒计时时间,单位为秒 |
/a | 取消已设置的关机计划 |
8. 普通关机 / 强制关机开关设计
8.1 为什么建议增加开关
虽然项目最初确认采用强制关机,但如果强制关机成为唯一方式,风险较高。
例如用户正在编辑:
- Word;
- Excel;
- Keil 工程;
- Altium 工程;
- VS Code 代码;
- 浏览器表单;
- 正在下载或复制的文件;
到点强制关机可能导致数据丢失。
因此建议界面中增加复选框:
☑ 强制关闭正在运行的程序
8.2 默认策略建议
可以采用:
默认勾选强制关机,但界面必须明确提示风险。
或者采用更安全的策略:
默认不勾选强制关机,由用户主动开启。
从软件体验和安全性角度,更推荐:
默认不勾选强制关机。
8.3 命令逻辑
未勾选强制关机:
shutdown /s /t 秒数
勾选强制关机:
shutdown /s /f /t 秒数
8.4 界面提示
建议在复选框下方显示:
强制关机会关闭未保存的程序,请提前保存文件。
9. 关机前提醒设计
9.1 设计目的
关机前提醒用于降低误关机风险,尤其是在开启强制关机时非常重要。
9.2 推荐提醒时间
第一版建议固定为:
关机前 60 秒提醒
后续版本可以扩展为可选:
30 秒 / 60 秒 / 3 分钟 / 5 分钟
9.3 提醒方式
可以采用 PySide6 弹窗:
Piggy Nap 提醒:
电脑将在 60 秒后自动关机。
请保存文件。
[取消关机] [知道了]
9.4 注意事项
如果软件已经退出,软件自身无法弹出提醒。
因此第一版的逻辑可以设计为:
| 软件状态 | 关机前提醒是否可用 |
|---|---|
| 软件正在运行 | 可以提醒 |
| 软件最小化到托盘 | 可以提醒 |
| 软件已经退出 | 无法提醒 |
| Windows 关机计划仍存在 | 仍会关机 |
文档和界面中需要说明:
关机计划由 Windows 执行,软件退出后仍然有效;但软件退出后无法弹出关机前提醒。
10. 时间设置逻辑
10.1 快捷按钮
快捷按钮如下:
| 按钮 | 实际秒数 |
|---|---|
| 10 分钟后关机 | 600 秒 |
| 30 分钟后关机 | 1800 秒 |
| 1 小时后关机 | 3600 秒 |
| 2 小时后关机 | 7200 秒 |
10.2 自定义具体时间
用户可以选择具体时间,例如:
23:30
软件根据当前时间计算剩余秒数:
目标时间 - 当前时间 = 剩余秒数
10.3 时间已过的处理
如果用户选择的时间早于当前时间,则自动理解为明天同一时间。
例如:
| 当前时间 | 用户选择 | 实际关机时间 |
|---|---|---|
| 今天 20:00 | 23:30 | 今天 23:30 |
| 今天 22:00 | 21:30 | 明天 21:30 |
| 今天 23:59 | 00:10 | 明天 00:10 |
10.4 设置成功后的显示
当前状态:已设置自动关机
目标时间:今天 23:30
距离睡觉还有:01小时 25分钟 30秒
11. 倒计时显示设计
11.1 显示内容
设置成功后,主界面显示:
当前状态:已设置自动关机
目标时间:今天 23:30
距离睡觉还有:01小时 25分钟 30秒
11.2 刷新方式
使用 PySide6 的 QTimer 每秒刷新一次界面显示。
注意:
QTimer 只负责界面倒计时显示。
真正的关机计划由 Windows shutdown 命令负责。
这样做的好处是:
| 情况 | 是否仍会关机 |
|---|---|
| 软件保持打开 | 会 |
| 软件最小化到托盘 | 会 |
| 软件被关闭 | 会 |
| 界面倒计时停止 | 不影响 Windows 关机计划 |
12. 主界面设计
12.1 主界面草图
┌────────────────────────────────────┐
│ 🐷 Piggy Nap │
│ 小猪定时关机助手 │
│ │
│ 今天想几点让电脑睡觉? │
│ │
│ [ 23 : 30 ] │
│ │
│ [10分钟] [30分钟] [1小时] [2小时] │
│ │
│ [ 设置自动关机 ] │
│ [ 取消自动关机 ] │
│ │
│ 当前状态:小猪还醒着 │
│ 距离睡觉还有:--:--:-- │
│ │
│ □ 强制关闭正在运行的程序 │
│ □ 开机自动启动 Piggy Nap │
│ ☑ 关闭窗口时最小化到托盘 │
│ │
│ 提示:请提前保存文件。 │
└────────────────────────────────────┘
12.2 窗口建议
| 项目 | 建议 |
|---|---|
| 窗口大小 | 460 × 460 |
| 是否可调整大小 | 第一版固定大小 |
| 背景色 | 浅粉色 / 奶油粉 |
| 主按钮 | 粉色圆角按钮 |
| 取消按钮 | 稍醒目 |
| 字体 | Microsoft YaHei |
| 主 Logo | 原创睡觉小猪图标 |
| 操作方式 | 鼠标点击为主 |
13. 交互文案建议
Piggy Nap 可以适当采用可爱文案,但不能影响用户理解。
13.1 推荐文案
| 功能 | 推荐文案 |
|---|---|
| 设置关机 | 设置自动关机 |
| 取消关机 | 取消自动关机 |
| 倒计时 | 距离睡觉还有 |
| 未设置状态 | 小猪还醒着 |
| 已设置状态 | 小猪准备睡觉啦 |
| 成功提示 | 已设置自动关机 |
| 取消提示 | 已取消自动关机 |
13.2 不建议过度可爱化
例如不建议按钮只写:
睡觉觉
先别睡
原因是用户可能不清楚具体功能。
推荐写法是:
设置自动关机
取消自动关机
在状态栏和提示语里加入可爱风格即可。
14. 系统托盘设计
14.1 托盘功能
第一版实现系统托盘功能。
点击窗口关闭按钮时,默认:
最小化到系统托盘,不直接退出软件。
14.2 托盘菜单建议
托盘右键菜单建议设计为:
打开 Piggy Nap
10 分钟后关机
30 分钟后关机
1 小时后关机
2 小时后关机
取消自动关机
退出
14.3 设计价值
这样用户不打开主界面,也能快速完成常用操作:
- 快速设置 10 分钟后关机;
- 快速设置 30 分钟后关机;
- 快速取消关机;
- 快速退出软件。
14.4 退出软件时提示
如果当前已经设置了自动关机,退出软件时应提示:
当前已经设置自动关机。
退出 Piggy Nap 不会取消 Windows 的自动关机计划。
如需取消,请先点击“取消自动关机”。
是否继续退出?
15. 开机自启动设计
15.1 默认状态建议
虽然第一版需要实现开机自启动,但不建议默认开启。
建议默认:
□ 开机自动启动 Piggy Nap
由用户主动勾选。
15.2 原因
| 原因 | 说明 |
|---|---|
| 用户体验 | 避免用户觉得软件偷偷自启动 |
| 安全感 | 用户明确知道软件行为 |
| 降低误报 | 自启动行为过于主动可能引发安全软件警惕 |
| 更专业 | 符合正常桌面软件习惯 |
15.3 推荐实现方式
使用当前用户注册表 Run 项:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
写入项目:
PiggyNap = "软件exe完整路径"
15.4 Python 实现方向
使用 Python 内置模块:
import winreg
开启自启动:
winreg.SetValueEx(...)
关闭自启动:
winreg.DeleteValue(...)
15.5 注意事项
| 问题 | 说明 |
|---|---|
| 不建议写入 HKEY_LOCAL_MACHINE | 可能需要管理员权限 |
| 建议写入 HKEY_CURRENT_USER | 当前用户生效,通常不需要管理员权限 |
| 路径中有空格 | exe 路径需要加引号 |
| 软件移动位置 | 自启动路径可能失效 |
16. 测试模式设计
16.1 为什么需要测试模式
开发关机软件时,最怕的问题是:
调试按钮时真的把电脑关了。
因此建议加入测试模式。
16.2 测试模式开关
在配置文件中加入:
APP_TEST_MODE = True
或者:
ENABLE_REAL_SHUTDOWN = False
16.3 测试模式行为
当测试模式开启时,点击关机按钮不执行真实关机,只显示将要执行的命令。
例如:
测试模式:将执行 shutdown /s /t 600
如果勾选强制关机:
测试模式:将执行 shutdown /s /f /t 600
16.4 正式发布前
正式发布前必须确认:
APP_TEST_MODE = False
或者:
ENABLE_REAL_SHUTDOWN = True
17. 技术选型
17.1 Python 版本
建议使用:
Python 3.11 或 Python 3.12
不建议使用过旧版本,例如 Python 3.7、3.8。
17.2 GUI 框架
采用:
PySide6
选择 PySide6 的原因:
| 项目 | 说明 |
|---|---|
| 官方属性 | Qt 官方 Python 绑定 |
| 授权 | LGPL,相对适合分发 |
| API | 与 PyQt6 接近 |
| Qt 版本 | Qt6 |
| 适合桌面软件 | 是 |
17.3 打包工具
采用:
PyInstaller
18. 工程目录结构
18.1 推荐目录
工程目录和文件名建议全部使用英文,避免中文路径导致打包、资源加载或命令行兼容问题。
piggy_nap/
│
├─ main.py
├─ requirements.txt
├─ README.md
│
├─ app/
│ ├─ __init__.py
│ ├─ main_window.py
│ ├─ shutdown_service.py
│ ├─ autostart_service.py
│ ├─ tray_service.py
│ ├─ reminder_service.py
│ ├─ time_utils.py
│ └─ config.py
│
├─ assets/
│ ├─ piggy_nap.ico
│ ├─ piggy_logo.png
│ └─ moon.png
│
├─ styles/
│ └─ pink_pig.qss
│
└─ build_scripts/
└─ build_exe.bat
18.2 命名建议
| 类型 | 建议 |
|---|---|
| 工程目录 | piggy_nap |
| exe 文件 | PiggyNap.exe |
| 图标文件 | piggy_nap.ico |
| 主样式文件 | pink_pig.qss |
| 注册表键名 | PiggyNap |
19. 模块设计
19.1 main.py
作用:
- 创建 QApplication;
- 加载 QSS 样式;
- 创建主窗口;
- 启动事件循环。
19.2 main_window.py
作用:
- 主界面;
- 按钮响应;
- 时间选择;
- 倒计时显示;
- 托盘交互;
- 开机自启动复选框;
- 强制关机复选框。
19.3 shutdown_service.py
作用:
- 设置自动关机;
- 取消自动关机;
- 根据是否强制关机拼接 shutdown 参数。
19.4 autostart_service.py
作用:
- 设置开机自启动;
- 取消开机自启动;
- 检查当前是否已启用开机自启动。
19.5 tray_service.py
作用:
- 创建系统托盘图标;
- 创建托盘菜单;
- 响应打开、快捷关机、取消关机、退出等操作。
19.6 reminder_service.py
作用:
- 管理关机前提醒;
- 在关机前 60 秒弹窗;
- 提供“取消关机”和“知道了”按钮。
19.7 time_utils.py
作用:
- 计算目标关机时间;
- 计算剩余秒数;
- 格式化倒计时文本。
19.8 config.py
作用:
- 保存软件名称;
- 保存版本号;
- 保存注册表键名;
- 保存测试模式开关;
- 保存默认配置。
20. 核心代码逻辑示例
20.1 设置关机
import subprocess
def schedule_shutdown(seconds: int, force: bool = False, test_mode: bool = False) -> str:
if seconds <= 0:
raise ValueError("关机时间必须大于 0 秒")
cmd = ["shutdown", "/s"]
if force:
cmd.append("/f")
cmd.extend(["/t", str(seconds)])
if test_mode:
return "测试模式:" + " ".join(cmd)
subprocess.run(cmd, check=True, shell=False)
return "已设置自动关机:" + " ".join(cmd)
20.2 取消关机
import subprocess
def cancel_shutdown(test_mode: bool = False) -> str:
cmd = ["shutdown", "/a"]
if test_mode:
return "测试模式:" + " ".join(cmd)
subprocess.run(cmd, check=False, shell=False)
return "已取消自动关机"
20.3 计算目标时间
from datetime import datetime, timedelta
def calculate_seconds_until(hour: int, minute: int) -> tuple[int, datetime]:
now = datetime.now()
target = now.replace(
hour=hour,
minute=minute,
second=0,
microsecond=0
)
if target <= now:
target += timedelta(days=1)
seconds = int((target - now).total_seconds())
return seconds, target
20.4 格式化倒计时
def format_countdown(seconds: int) -> str:
if seconds <= 0:
return "00小时 00分钟 00秒"
hours = seconds // 3600
minutes = (seconds % 3600) // 60
secs = seconds % 60
return f"{hours:02d}小时 {minutes:02d}分钟 {secs:02d}秒"
21. requirements.txt
第一版依赖可以保持简单:
PySide6>=6.6.0
开发和打包时再安装:
pyinstaller
22. 打包发布方案
22.1 安装依赖
pip install PySide6 pyinstaller
22.2 打包命令
pyinstaller --onefile --windowed --icon=assets\piggy_nap.ico main.py
22.3 参数说明
| 参数 | 说明 |
|---|---|
--onefile | 打包成单个 exe |
--windowed | 运行时不显示黑色命令行窗口 |
--icon | 指定软件图标 |
22.4 输出文件
打包完成后,文件位于:
dist\main.exe
建议重命名为:
PiggyNap.exe
23. 开发阶段计划
阶段 1:最小可运行版本
目标:
- 打开主窗口;
- 快捷按钮可点击;
- 测试模式显示将执行的命令;
- 取消关机命令可测试。
功能:
| 功能 | 状态 |
|---|---|
| 主窗口 | 完成 |
| 10 分钟按钮 | 完成 |
| 30 分钟按钮 | 完成 |
| 1 小时按钮 | 完成 |
| 2 小时按钮 | 完成 |
| 取消关机 | 完成 |
| 测试模式 | 完成 |
阶段 2:真实关机命令接入
目标:
- 关闭测试模式;
- 接入真实
shutdown命令; - 支持普通关机和强制关机切换;
- 增加设置前确认弹窗。
阶段 3:自定义时间和倒计时
目标:
- 支持选择具体时间;
- 显示目标关机时间;
- 显示剩余倒计时;
- 每秒刷新。
阶段 4:UI 风格完善
目标:
- 粉色小猪卡通风格;
- 圆角按钮;
- 原创图标;
- 可爱但不影响理解的状态文案。
阶段 5:托盘功能
目标:
- 最小化到托盘;
- 托盘菜单;
- 托盘中快捷关机;
- 托盘中取消关机;
- 托盘中退出软件。
阶段 6:开机自启动
目标:
- UI 中增加开机自启动复选框;
- 写入当前用户注册表 Run 项;
- 支持取消开机自启动。
阶段 7:关机前提醒
目标:
- 关机前 60 秒弹窗;
- 弹窗中提供取消关机按钮;
- 托盘状态下也能提醒。
阶段 8:打包测试
目标:
- PyInstaller 打包;
- Win10 测试;
- Win11 测试;
- 杀毒误报观察;
- 不同路径运行测试;
- 自启动路径测试。
24. 关键测试用例
24.1 关机功能测试
| 测试项 | 预期结果 |
|---|---|
| 点击 10 分钟后关机 | Windows 设置 600 秒后关机 |
| 点击 30 分钟后关机 | Windows 设置 1800 秒后关机 |
| 点击 1 小时后关机 | Windows 设置 3600 秒后关机 |
| 点击 2 小时后关机 | Windows 设置 7200 秒后关机 |
| 设置具体时间 | 正确换算为秒数 |
| 取消关机 | Windows 取消关机计划 |
24.2 强制关机测试
| 测试项 | 预期命令 |
|---|---|
| 未勾选强制关机 | shutdown /s /t 秒数 |
| 勾选强制关机 | shutdown /s /f /t 秒数 |
24.3 时间逻辑测试
| 当前时间 | 选择时间 | 预期结果 |
|---|---|---|
| 20:00 | 23:30 | 今天 23:30 |
| 22:00 | 21:30 | 明天 21:30 |
| 23:59 | 00:10 | 明天 00:10 |
24.4 托盘测试
| 测试项 | 预期结果 |
|---|---|
| 点击关闭按钮 | 最小化到托盘 |
| 双击托盘图标 | 打开主界面 |
| 托盘菜单点击打开 | 打开主界面 |
| 托盘菜单点击 10 分钟后关机 | 设置 600 秒后关机 |
| 托盘菜单点击取消关机 | 执行 shutdown /a |
| 托盘菜单点击退出 | 软件退出 |
24.5 开机自启动测试
| 测试项 | 预期结果 |
|---|---|
| 勾选开机自启动 | 注册表写入成功 |
| 取消勾选 | 注册表项删除成功 |
| 重启电脑 | 软件自动启动 |
| 移动 exe 位置 | 需要重新设置自启动 |
24.6 测试模式测试
| 测试项 | 预期结果 |
|---|---|
| 开启测试模式 | 不执行真实关机 |
| 点击 10 分钟后关机 | 显示将执行的命令 |
| 点击取消关机 | 显示将执行 shutdown /a |
| 关闭测试模式 | 执行真实系统命令 |
25. 风险与注意事项
25.1 强制关机风险
如果用户勾选:
强制关闭正在运行的程序
软件会执行:
shutdown /s /f /t 秒数
可能导致未保存内容丢失。
必须提醒用户提前保存:
- 文档;
- 代码;
- PCB 工程;
- 浏览器表单;
- 下载任务;
- 正在烧录或调试的工程。
25.2 软件退出不等于取消关机
Windows 的关机计划由系统执行。
因此:
退出 Piggy Nap 不会取消已经设置的 Windows 自动关机计划。
用户如果要取消,必须点击:
取消自动关机
25.3 杀毒软件误报
PyInstaller 打包的单文件 exe 有时可能被部分杀毒软件误报。
降低误报的方法:
- 使用干净 Python 环境打包;
- 不加入无关依赖;
- 不使用可疑压缩壳;
- 设置正规图标;
- 设置版本信息;
- 后续可考虑代码签名。
25.4 自启动路径失效
如果用户移动 exe 文件位置,注册表中的开机自启动路径可能失效。
解决方案:
移动软件后,重新勾选一次开机自启动。
26. 后续扩展方向
后续版本可以增加:
| 功能 | 说明 |
|---|---|
| 睡眠模式 | 支持定时睡眠 |
| 重启模式 | 支持定时重启 |
| 注销模式 | 支持定时注销 |
| 普通关机 / 强制关机记忆 | 保存用户上次选择 |
| 关机前提醒时间可选 | 30 秒 / 60 秒 / 3 分钟 / 5 分钟 |
| 白名单保护 | 某些程序运行时不关机 |
| 定时任务模式 | 使用 Windows 任务计划程序 |
| 安装包 | 使用 Inno Setup |
| 多主题 | 粉色、蓝色、夜间模式 |
| 版本信息窗口 | 显示版本、作者、项目说明 |
| GitHub 发布 | 开源或发布下载版本 |
27. 推荐最终技术路线
Python 3.11 / 3.12
↓
PySide6 / Qt6
↓
Piggy Nap 单窗口主界面
↓
粉色小猪卡通风格 UI
↓
快捷按钮 + 自定义时间选择
↓
普通关机 / 强制关机可选
↓
Windows shutdown 命令
↓
QTimer 刷新倒计时
↓
关机前 60 秒提醒
↓
QSystemTrayIcon 系统托盘
↓
winreg 开机自启动
↓
PyInstaller 打包 PiggyNap.exe
28. 结论
Piggy Nap 的项目方向已经明确:
中文名:小猪定时关机助手
英文名:Piggy Nap
技术路线:Python + PySide6
目标系统:Win10 / Win11 64 位
界面风格:粉色小猪卡通风格
核心功能:定时自动关机
新增建议中,最值得纳入第一版的是:
- 使用 Piggy Nap 作为正式英文名;
- 工程目录和文件名全部使用英文;
- 图标采用原创睡觉小猪设计;
- 增加普通关机 / 强制关机复选框;
- 增加关机前 60 秒提醒;
- 托盘菜单加入快捷关机入口;
- 开机自启动默认关闭,由用户主动勾选;
- 开发阶段加入测试模式,避免误关机。
这样 Piggy Nap 不只是一个能用的关机小工具,而是一个有完整产品感、可打包分发、后续可持续迭代的小型桌面软件项目。
----------
重建.venv环境

# 关掉 PyCharm,避免占用 .venv
cd C:\Users\CQJY\Desktop\PythonProject
Remove-Item -Recurse -Force .\.venv
# 用你已安装的 3.13/64 重建
py -3.13 -m venv .venv
# 快速自检
.\.venv\Scripts\python.exe -V
.\.venv\Scripts\python.exe -c "import struct,platform;print('arch=',struct.calcsize('P')*8,'os=',platform.platform())"
# 重新装依赖
.\.venv\Scripts\python.exe -m pip install -U pip
.\.venv\Scripts\python.exe -m pip install PyQt6 pyserial # 串口建议用 pyserial,更稳
接下来按这个顺序测,先保持默认测试模式,不会真实关机。
# 1. 安装依赖
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
# 2. 重新生成图标素材
.\.venv\Scripts\python.exe build_scripts\generate_assets.py
# 3. 语法检查
.\.venv\Scripts\python.exe -m compileall -q .
# 4. 启动程序
.\.venv\Scripts\python.exe main.py

慢的主要原因是 PySide6 元包会下载很大的 PySide6_Addons,你截图里这个包有 168.8 MB,但 Piggy Nap 目前只用 QtCore / QtGui / QtWidgets,不需要 Addons。
我已经把依赖改成更轻的:
PySide6-Essentials>=6.6.0
现在这样做:
# 1. 先 Ctrl+C 停掉当前下载
# 2. 安装精简运行依赖,建议使用国内镜像
.\.venv\Scripts\python.exe -m pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 3. 启动测试
.\.venv\Scripts\python.exe main.py



为什么打包后执行exe报错。

原因是打包时没有用到你的 .venv 环境。原来的 build_exe.bat 直接调用 pyinstaller,可能命中了系统 PATH 里的另一个 PyInstaller,那个环境里没有 PySide6,所以 exe 运行时报:
ModuleNotFoundError: No module named 'PySide6'
我已修复脚本:现在会优先使用项目内的 .venv\Scripts\python.exe 来运行 PyInstaller。我也重新打包验证了,日志里已经显示:
Python environment: D:\Piggy_Nap\piggy_nap\.venv
Processing standard module hook 'hook-PySide6.py'
你现在重新执行:
cd D:\Piggy_Nap\piggy_nap
.\build_scripts\build_exe.bat
.\dist\PiggyNap.exe
如果还不放心,可以先确认打包环境:
.\.venv\Scripts\python.exe -c "import PySide6; print(PySide6.__file__)"
.\.venv\Scripts\python.exe -m PyInstaller --version
补充一点:pip show PySide6 找不到不代表异常,因为我们为了减少下载体积安装的是 PySide6-Essentials,但它提供的 Python 模块仍然叫 PySide6。
桌面状态栏的图标是Python




下载
更多推荐
所有评论(0)