# TodoWidget **Repository Path**: ryan_zyx/todo-widget ## Basic Information - **Project Name**: TodoWidget - **Description**: 一个简洁美观的待办清单 Windows 桌面小工具,使用 Python + PyQt5 开发。 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-02-25 - **Last Updated**: 2026-09-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: Python, Daily, PyQt5 ## README # TodoWidget - 待办清单桌面小工具 一个简洁美观的待办清单 Windows 桌面小工具,使用 Python + PyQt5 开发。 ## 功能特性 ### 基础功能 - ✅ **窗口置顶** - 始终显示在最上层 - ✅ **拖动定位** - 可拖动到屏幕任意位置 - ✅ **智能最小化** - 失去焦点时自动缩成窄条贴在屏幕侧边 - ✅ **悬停展开** - 鼠标悬停在侧边条上自动展开 - ✅ **本地存储** - 数据保存在 JSON 文件中 - ✅ **精美 UI** - 纯 PyQt5 实现的现代化界面,渐变色设计 ### 任务管理 - ✅ **添加任务** - 输入内容后按回车或点击"添加" - ✅ **标记完成** - 点击任务前的复选框 - ✅ **编辑任务** - 点击编辑按钮修改任务内容 - ✅ **删除任务** - 点击任务右侧的删除按钮 - ✅ **清空已完成** - 批量清空所有已完成的任务 ### 子任务支持 - ✅ **添加子任务** - 点击子任务按钮为父任务添加子任务 - ✅ **级联完成** - 完成父任务时自动完成所有子任务 - ✅ **取消完成不级联** - 取消父任务完成时,子任务状态保持不变 - ✅ **级联删除** - 删除父任务时同时删除所有子任务 ### 回收站功能 - ✅ **回收站** - 删除的任务移入回收站而非直接删除 - ✅ **恢复任务** - 从回收站恢复已删除的任务 - ✅ **永久删除** - 在回收站中可永久删除任务 - ✅ **清空回收站** - 一键清空所有回收站内容 - ✅ **自动清理** - 自动清理超过 30 天的回收站项目 - ✅ **抽屉动画** - 平滑的抽屉式回收站界面 ### 界面交互 - ✅ **窗口调整大小** - 支持八方向调整窗口大小(拖动边缘或角落) - ✅ **任务统计** - 显示待完成/总任务数量 - ✅ **动态高度** - 任务高度根据内容自动调整 - ✅ **完成时间** - 显示任务完成时间(今天/昨天/日期) - ✅ **子任务统计** - 显示子任务数量 ## 快速开始 ### 方法 1:直接运行(需安装 Python) 1. 安装 Python 3.8+ 2. 安装依赖:`pip install PyQt5` 3. 运行:`python main.py` ### 方法 2:打包成 exe ```bash pyinstaller --onefile --windowed --name Tips --add-data "Resources;Resources" --icon "Resources/icon.ico" main.py ``` 打包完成后,exe 文件位于 `dist/Tips.exe` ## 使用方法 ### 基本操作 - **添加任务** - 输入内容后按回车或点击"添加"按钮 - **标记完成** - 点击任务前的复选框 - **编辑任务** - 点击任务右侧的编辑按钮,修改后按回车保存 - **删除任务** - 点击任务右侧的删除按钮 ### 子任务操作 - **添加子任务** - 点击父任务右侧的子任务按钮(+) - **完成子任务** - 点击子任务的复选框 - **删除子任务** - 点击子任务右侧的删除按钮 ### 回收站操作 - **打开回收站** - 点击底部的"🗑️ 回收站"按钮 - **恢复任务** - 在回收站中点击任务的"恢复"按钮 - **永久删除** - 在回收站中点击任务右侧的×按钮 - **清空回收站** - 在回收站底部点击"清空回收站"按钮 ### 窗口操作 - **移动窗口** - 按住窗口顶部标题栏拖动 - **调整大小** - 拖动窗口边缘或角落调整大小 - **最小化** - 点击其他窗口自动最小化到侧边 - **展开** - 鼠标悬停在侧边条上自动展开 ## 文件结构 ``` TodoWidget/ ├── Resources/ # 资源文件 │ ├── icon.ico # 应用图标(ICO 格式) │ ├── icon.png # 应用图标(PNG 格式) │ ├── delete.png # 删除按钮图标(普通状态) │ ├── deletes.png # 删除按钮图标(悬浮状态) │ ├── edit.png # 编辑按钮图标(普通状态) │ ├── edits.png # 编辑按钮图标(悬浮状态) │ ├── add.png # 添加子任务图标(普通状态) │ └── adds.png # 添加子任务图标(悬浮状态) ├── main.py # 主程序 ├── todo_data.json # 数据存储文件(自动生成) ├── requirements.txt # Python 依赖 ├── Tips.spec # PyInstaller 打包配置 └── README.md # 说明文档 ``` ## 技术栈 - Python 3.8+ - PyQt5 - GUI 框架(纯原生控件,无 WebEngine) - JSON - 数据存储 ## 界面特性 - **窗口尺寸**:750×900(初始),最小尺寸 600×700 - **渐变色主题**:#667eea → #764ba2 - **圆角设计**:自定义圆角复选框和按钮 - **流畅动画**:抽屉式回收站、最小化/展开动画 - **无边框窗口**:自定义窗口边框和拖动区域 ## 数据存储 待办事项数据保存在以下位置: - **打包后**:`用户主目录/todo_data.json` - **开发环境**:程序同目录下的 `todo_data.json` 数据结构: ```json { "tasks": [ { "id": 1234567890, "text": "任务内容", "completed": false, "completed_at": null, "subtasks": [ { "id": 1234567891, "text": "子任务内容", "completed": false, "completed_at": null, "parent_id": 1234567890 } ] } ], "trash": [] } ``` ## 系统要求 - Windows 10 或更高版本 - Python 3.8+(如从源码运行) ## 许可证 MIT License