本仓库包含一个基于 PySide6 的桌面待办事项管理工具。当前已对项目结构进行拆分,便于维护与后续扩展。
- 🔔 多个任务同时到期时会汇总到一个软件内提醒窗口,可选择后批量完成或推迟,不再层层弹出;应用不会创建 Windows 系统通知,最小化或关闭到托盘时也不会显示系统气泡。
- ⏱️ 新增任务的默认截止时间严格取当前时间一小时后,日期会自然跨到次日,并按界面可见分钟保存。
- 🕒 截止时间改为内联日期下拉与滚轮时间控件;常见任务可直接滚轮调时,跨日期时才展开日历,无需独立确认窗口。
- ⏳ 任务延后后只编辑内容或优先级会保留新的截止时间与提醒状态;只有实际修改时间或提醒选项才会重置调度。
- 🌗 应用会自动检测系统深/浅色主题并切换配色方案,支持运行时动态刷新窗口、对话框与卡片组件颜色。
- ⏰ 推迟提醒后会同步更新再次编辑时的默认截止时间;编辑时仅在截止时间或提醒偏移变化后自动重置旧提醒状态。
- 🎯 首次启动采用 320×640 px 的默认窗口尺寸,并在小屏设备上自动调整以保持可视区域。
- 📐 “暂无待办事项”占位信息在初次打开和窗口调整时都会保持居中,无需额外刷新。
- 🪟 托盘图标的快速添加操作会复用已有对话框窗口,防止重复弹出多个无法交互的窗口。
- ✅ 待办事项列表采用卡片式展示,并提供完成状态、优先级、定时器等信息。
- ✅ 已完成任务显示填充勾选图标,未完成任务改为展示空心圆,同时保留编辑按钮,随时可修改内容。
- ✅ 添加按钮改用独立图标并保持居中,便于快速创建任务。
- 🔄 后续计划:继续完善提醒与筛选策略,补充更多示例数据与使用说明,并持续打磨桌面端体验。
.
├── main.py # 程序入口脚本
├── todo_app/ # 应用源码包
│ ├── __init__.py
│ ├── app.py # 启动封装
│ ├── constants.py # 常量、颜色、路径配置
│ ├── dialogs.py # 任务通知及编辑对话框
│ ├── main_window.py # 主窗口逻辑
│ ├── paths.py # 基础路径与数据文件位置
│ ├── scheduling.py # 提醒、推迟与编辑调度规则
│ ├── storage.py # 数据加载与保存
│ ├── utils.py # 工具函数(图标、声音等)
│ └── widgets.py # 自定义任务卡片组件
└── todos.json # 待办数据文件(程序运行时自动生成)
- 安装依赖:
pip install PySide6
- 运行应用:
python main.py
应用会默认在根目录创建/读取 todos.json,并支持系统托盘、提醒、推迟等功能。界面配色会根据当前系统主题在浅色与深色方案之间自动切换,确保可读性。
- GitHub Actions 工作流
.github/workflows/build-exe.yml会在手动触发、推送到main分支或推送v*标签时,使用 PyInstaller 打包 Windows 单文件可执行程序;所有构建都会上传名称含来源与短提交 SHA、保留 7 天的临时 Actions Artifact。 - 推送到
main时还会将专用可变标签pre-main更新到当前提交,并创建或更新标记为 Pre-release、不会成为 Latest Release 的TODOList Main Preview,其中包含TODOList.exe。只有该pre*预发布标签允许移动。 - 手动运行仅上传临时 Artifact,不创建或更新任何 Release,也不修改标签;即使手动选择标签 ref,仍保持临时构建语义。
- 推送
v*标签才会创建或更新对应的正式 Release,并上传TODOList.exe作为长期正式下载入口。所有v*版本标签均由发布者显式推送且保持不可变;同一标签的工作流重跑允许覆盖该标签的同名资产以恢复失败发布。 - 若需本地验证,可执行:
请将
pyinstaller main.py --name TODOList --noconsole --clean -onefile --add-data "assets;assets" --hidden-import PySide6.QtSvg --hidden-import PySide6.QtMultimedia"assets;assets"中的分隔符替换为当前系统要求(Windows 使用;,macOS/Linux 使用:)。 - 打包版本会将
todos.json存放在用户数据目录(Windows 为%APPDATA%\TODOList,其他平台为~/.todolist/),以避免写入只读的程序目录。