基于PyQt5 开发的Todo应用

article/2025/6/15 18:11:23

在这里插入图片描述

Demo地址:https://gitcode.com/rmbnetlife/todo-app-pyqt.git

PyQt Todo 应用

一个使用 PyQt5 开发的现代化任务管理应用,帮助您高效管理日常任务和待办事项。

在这里插入图片描述

📋 应用简介

这是一个功能完整的桌面任务管理应用,具有直观的图形用户界面,支持任务的增删改查、优先级管理、状态筛选等功能。所有数据都保存在本地,确保您的隐私安全。

✨ 主要特性

  • 🎯 简洁直观:现代化的用户界面,操作简单易懂
  • 📝 完整的任务管理:添加、编辑、删除、完成任务
  • 🏷️ 优先级管理:支持高、中、低三个优先级,用颜色区分
  • 🔍 智能筛选:按状态和优先级筛选任务
  • 💾 数据持久化:自动保存到本地文件,支持数据备份
  • 📊 实时统计:状态栏显示任务统计信息
  • 响应迅速:基于 PyQt5,性能优异

🚀 快速开始

环境要求

  • Python 3.7 或更高版本
  • Windows/macOS/Linux 操作系统

安装步骤

  1. 克隆项目

    git clone https://gitcode.com/rmbnetlife/todo-app-pyqt.git
    cd todo-app-pyqt
    
  2. 创建虚拟环境

    方法一:使用 uv(推荐)

    # 安装 uv(如果尚未安装)
    pip install uv# 创建虚拟环境
    uv venv venv# 激活虚拟环境
    # Windows:
    venv\Scripts\activate
    # macOS/Linux:
    source venv/bin/activate
    

    方法二:使用 Python 内置 venv

    # 创建虚拟环境
    python -m venv venv# 激活虚拟环境
    # Windows:
    venv\Scripts\activate
    # macOS/Linux:
    source venv/bin/activate
    
  3. 安装依赖

    使用 uv(推荐)

    uv pip install -r requirements.txt
    

    使用 pip

    pip install -r requirements.txt
    
  4. 运行应用

    使用 uv

    uv run python main.py
    

    使用 Python

    python main.py
    
  5. 运行演示脚本(可选)

    # 使用 uv
    uv run python demo.py# 使用 Python
    python demo.py
    

首次使用

  1. 启动应用后,您会看到一个空的任务列表
  2. 点击「添加任务」按钮创建您的第一个任务
  3. 填写任务标题、描述(可选)和优先级
  4. 点击「保存」完成任务创建

📖 功能详解

1. 任务管理

添加任务
  • 点击主界面的「添加任务」按钮
  • 在弹出的对话框中填写:
    • 标题(必填):任务的简短描述
    • 描述(可选):任务的详细说明
    • 优先级:选择高、中、低优先级
  • 点击「保存」创建任务
编辑任务
  • 点击任务项右侧的「编辑」按钮
  • 在对话框中修改任务信息
  • 点击「保存」确认修改
完成任务
  • 点击任务项左侧的复选框
  • 已完成的任务会显示删除线效果
  • 再次点击可以取消完成状态
删除任务
  • 点击任务项右侧的「删除」按钮
  • 在确认对话框中点击「是」删除任务

2. 任务筛选

按状态筛选
  • 全部:显示所有任务
  • 待完成:只显示未完成的任务
  • 已完成:只显示已完成的任务
按优先级筛选
  • 在优先级下拉框中选择要显示的优先级
  • 可以选择「全部」或特定优先级(高/中/低)

3. 批量操作

清除已完成任务
  • 点击「清除已完成」按钮
  • 确认后将删除所有已完成的任务
  • 此操作不可撤销,请谨慎使用

4. 数据管理

自动保存
  • 应用每 30 秒自动保存一次数据
  • 每次操作(添加、编辑、删除)后立即保存
  • 数据保存在 data/tasks.json 文件中
手动备份
  • 通过菜单栏「文件」→「备份数据」
  • 备份文件保存为 tasks.json.backup

🏗️ 项目架构

目录结构

todo-app-pyqt/
├── main.py                 # 应用入口文件
├── requirements.txt        # 项目依赖
├── README.md              # 项目说明文档
├── demo.py                # 功能演示脚本
│
├── ui/                    # 用户界面模块
│   ├── __init__.py
│   ├── main_window.py     # 主窗口界面
│   ├── task_dialog.py     # 任务编辑对话框
│   └── task_item.py       # 单个任务项组件
│
├── models/                # 数据模型模块
│   ├── __init__.py
│   ├── task.py            # 任务数据模型
│   └── task_manager.py    # 任务管理器
│
├── utils/                 # 工具模块
│   ├── __init__.py
│   └── storage.py         # 数据存储工具
│
├── resources/             # 资源文件
│   └── styles.qss         # 界面样式文件
│
└── data/                  # 数据文件目录├── tasks.json         # 任务数据文件└── tasks.json.backup  # 数据备份文件

核心模块说明

1. 数据模型层 (models/)

task.py - 任务数据模型

  • Task 类:表示单个任务
  • Priority 枚举:任务优先级(高/中/低)
  • TaskStatus 枚举:任务状态(待完成/已完成)
  • 提供任务的创建、更新、序列化等方法

task_manager.py - 任务管理器

  • TaskManager 类:管理所有任务
  • 提供任务的增删改查功能
  • 支持按状态、优先级筛选任务
  • 提供任务统计信息
2. 用户界面层 (ui/)

main_window.py - 主窗口

  • 应用的主界面
  • 包含菜单栏、工具栏、任务列表
  • 处理用户交互和界面更新

task_dialog.py - 任务编辑对话框

  • 用于添加和编辑任务
  • 表单验证和数据收集
  • 支持静态方法调用

task_item.py - 任务项组件

  • 单个任务的显示组件
  • 包含复选框、任务信息、操作按钮
  • 支持任务状态切换和编辑删除
3. 工具层 (utils/)

storage.py - 数据存储

  • 处理 JSON 文件的读写
  • 提供数据备份功能
  • 错误处理和数据验证

技术栈

  • GUI 框架:PyQt5 5.15.9
  • 编程语言:Python 3.7+
  • 数据存储:JSON 文件
  • 架构模式:MVC(模型-视图-控制器)

🎨 界面预览

主界面

  • 顶部工具栏:添加任务按钮、筛选器、清除按钮
  • 中央区域:任务列表(支持滚动)
  • 底部状态栏:任务统计信息

任务项

  • 左侧:完成状态复选框
  • 中间:任务标题、描述、时间信息
  • 右侧:优先级标签、编辑和删除按钮

编辑对话框

  • 任务标题输入框(必填)
  • 任务描述文本框(可选)
  • 优先级下拉选择器
  • 保存和取消按钮

🔧 高级功能

快捷键

  • Ctrl + S:手动保存数据
  • Ctrl + Q:退出应用

数据格式

任务数据以 JSON 格式存储,结构如下:

{"tasks": [{"id": "唯一标识符","title": "任务标题","description": "任务描述","priority": "优先级","status": "状态","created_at": "创建时间","updated_at": "更新时间","completed_at": "完成时间"}]
}

自定义样式

应用使用 QSS(Qt Style Sheets)进行界面美化,样式文件位于 resources/styles.qss。您可以修改此文件来自定义界面外观。

🧪 功能演示

项目包含一个演示脚本,展示核心功能的使用:

python demo.py

演示内容包括:

  • 任务的创建、更新、删除
  • 状态切换和优先级筛选
  • 数据持久化和统计功能

🐛 故障排除

常见问题

  1. 应用无法启动

    • 检查 Python 版本是否为 3.7+
    • 确认已安装 PyQt5:pip install PyQt5
  2. 数据丢失

    • 检查 data/ 目录是否存在
    • 查看是否有备份文件 tasks.json.backup
  3. 界面显示异常

    • 尝试删除 __pycache__ 目录
    • 重新启动应用

日志和调试

  • 应用会在控制台输出错误信息
  • 数据保存失败时会显示错误提示
  • 可以通过修改代码添加更详细的日志

🤝 贡献指南

欢迎提交 Issue 和 Pull Request!

开发环境设置

  1. Fork 项目
  2. 创建功能分支
  3. 提交更改
  4. 创建 Pull Request

代码规范

  • 遵循 PEP 8 Python 代码规范
  • 添加适当的注释和文档字符串
  • 保持代码简洁和可读性

📄 许可证

本项目采用 MIT 许可证 - 详见 LICENSE 文件

🙏 致谢

  • PyQt5 团队提供的优秀 GUI 框架
  • Python 社区的支持和贡献

享受高效的任务管理体验! 🎉


http://www.hkcw.cn/article/glycMQchsW.shtml

相关文章

springboot集成websocket给前端推送消息

一般通常情况下,我们都是前端主动朝后端发送请求,那么有没有可能,后端主动给前端推送消息呢?这时候就可以借助websocket来实现。下面给出一个简单的实现样例。 首先创建一个websocketDemo工程,该工程的整体结构如下&a…

002医护人员排班系统技术解析:构建高效医疗人力管理平台

医护人员排班系统技术解析:构建高效医疗人力管理平台 在医疗行业高速发展的今天,科学合理的医护人员排班对保障医疗服务质量和效率至关重要。医护人员排班系统作为医疗信息化管理的重要工具,通过整合医院信息管理、医护信息管理、医护类型管…

CTFHub-RCE 命令注入-过滤目录分隔符

观察源代码 代码里面可以发现过滤了目录分隔符\和/ 判断是Windows还是Linux 源代码中有 ping -c 4 说明是Linux 查看有哪些文件 127.0.0.1|ls 打开flag文件 发现存在一个flag_is_here的文件夹,我们需要打开这个文件夹找到目标文件我们尝试分步,先利…

使用curlconverter网站快速生成requests请求包

在python写requests请求的时候,抓包后需要复制粘贴包的内容,然后手动修改和写代码。 最近发现一个好的网站 https://curlconverter.com/python/ 可以复制curl(bash)数据后,直接生成数据包,非常便捷。 举例说明: 选…

产品规格书写作结构、规范(编写指南)

一、产品规格书定义 产品规格书是一种综合性文档,它将产品需求、交互设计、业务流程和界面原型有机结合在一起。与传统文字为主的规格书不同,产品规格书通过高保真原型、动态交互和详细注释来完整表达产品功能和用户体验要求。 产品规格书是产品设计阶…

Webug4.0靶场通关笔记16- 第16关MySQL配置文件下载

目录 第16关 MySQL配置文件下载 1.打开靶场 2.源码分析 3.渗透实战 (1)Windows系统 (2)Linux系统 4、防御方法 本文通过《webug4.0靶场第16关MySQL配置文件下载》来进行渗透实战。文件下载是指 Web 应用程序在处理文件下载…

Java开发经验——阿里巴巴编码规范实践解析10

摘要 这篇文章主要介绍了阿里巴巴Java开发的编码规范实践解析,重点聚焦于系统设计规范。文中强调了存储方案和底层数据结构设计的重要性,指出其需要经过严格评审并形成文档。同时,详细阐述了设计与评审流程,包括设计方案初稿、建…

AutoML详解:自动化机器学习的未来

AutoML详解:自动化机器学习的未来 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 AutoML详解:自动化机器学习的未来摘要引言技术架构对比1. 核心组件:从算法到工作流2. 算法实现…

(8)-Fiddler抓包-Fiddler如何设置捕获会话

1.简介 在前面我们介绍了Fiddler界面内容以及作用。那么我们接下来讲解和分享如何设置Fiddler后,我们就可以捕获会话,进行抓包了。 2.捕获会话的设备 常见的捕获会话的设备分为PC(电脑)端和手机(Android和IOS苹果&am…

虚拟DOM和DOM是什么?有什么区别?虚拟DOM的优点是什么?

虚拟DOM与真实DOM的概念 虚拟DOM(Virtual DOM)是一种对真实DOM的抽象表示,其结构通常为一个JavaScript对象,保存了DOM节点的标签、属性、子节点等信息。真实DOM则是浏览器中的实际文档对象模型,由HTML代码解析生成&am…

电赛TIMSPM0G3507 CCS环境安装在D盘的方法

前言 安装TI的环境内存占用还是比较大的,但是大家默认安装到C盘,本篇就教大家从0到一安装到D盘 先把3个要下载的下载了 1.安装SDK 登录LP-MSPM0G3507 评估板 | TI.com.cn这个网站 选择Windows的下载 2.下载图形配置软件 登录SYSCONFIG IDE、配置、编译器…

电力高空作业安全检测(3)RT-DETR模型

背景与挑战 YOLO 系列模型长期以来在实时目标检测领域占据主导地位,因其在速度与精度之间取得了良好的平衡。然而,这些模型在处理多尺度特征时,往往依赖于非极大值抑制(NMS)后处理步骤,这不仅增加了计算…

项目架构初始化,底部导航页面切换

引言 在移动端应用开发中,底部导航栏是一种常见的用户界面元素,用于在不同的页面之间进行快速切换。本文将介绍如何初始化一个 Vue.js 项目,并实现底部导航栏页面切换的功能。 🤍 前端开发工程师、技术日更博主、已过CET6 &…

51c大模型~合集133

我自己的原文哦~ https://blog.51cto.com/whaosoft/13948969 #用Veo 3Suno做了个AI Rapper 吊打音乐节上的流量明星 太疯狂了!AI生成的嘻哈歌手唱Rap以假乱真,网友直呼「看不出破绽」。 来来来,眼尖的朋友请告诉我,下面这个…

俄称控制定居点 乌称打击俄纵深目标 双方战事持续升级

俄罗斯国防部5月31日发布战报称,俄军控制了苏梅州沃多拉哈和顿涅茨克地区诺沃波利居民点。在过去24小时内,俄军在苏梅、哈尔科夫、顿涅茨克、扎波罗热、赫尔松等方向打退乌军多次进攻并发动多次攻势。乌克兰武装部队总司令瑟尔斯基同一天表示,乌军在5月使用远程精确武器打击…

机器学习知识图谱——K-means++聚类算法

目录 一、图解K-means++ 聚类算法知识图谱 二、K-means 是什么? 三、K-means++ 是什么? 四、K-means++ 算法流程 第一步:选择初始质心(核心改进) 第二步:执行 K-means 正式流程 五、算法图示 六、优点 vs 缺点 七、常用场景 八、Python 代码示例 (使用 sklear…

Java SE 2.数据类型与变量

Java是一门强类型语言,数据类型和变量是构建程序的基石。理解数据类型的选择和变量的定义方式,直接影响代码的性能和可读性。就一句话:数据类型和变量很重要! 1. 字面常量 我们刚接触Java时,曾写过一个简单的程序&am…

数据结构-算法学习C++(入门)

目录 03二进制和位运算04 选择、冒泡、插入排序05 对数器06 二分搜索07 时间复杂度和空间复杂度08 算法和数据结构09 单双链表09.1单双链表及反转09.2合并链表09.2两数相加09.2分隔链表 013队列、栈、环形队列013.1队列013.2栈013.3循环队列 014栈-队列的相互转换014.1用栈实现…

【前端】SPA v.s. MPA

链接:页面结构 误区 页面结构管理有两种常见方式:路由形式 和 组件形式。路由形式 对应MPA ,组件形式对应SPA ❌ 误区 1:路由形式 MPA❌ 路由是 SPA 和 MPA 共有的概念,区别在于路由映射的对象: MPA 的…

国米0-5创欧冠决赛最大分差 巴黎青春风暴横扫夺冠

在安联球场举行的欧冠决赛中,巴黎圣日耳曼以5比0横扫国际米兰,创造了欧冠决赛历史上的最大分差纪录。此前欧冠决赛的最大分差为四球,最近一次是1993-1994赛季AC米兰对巴萨的4比0。恩里克带领下的巴黎圣日耳曼首次赢得欧冠冠军,他们的表现令人震惊。比赛开始后不久,巴黎便迅…