乐于分享
好东西不私藏

PyQt5打造桌面日程提醒工具

PyQt5打造桌面日程提醒工具

效果图

在快节奏的工作和学习中,你是否也常常陷入这样的困境:忙碌起来忘记重要会议、错过作业截止时间、待办事项堆积如山却毫无头绪?手机提醒容易被消息淹没,电脑端又没有轻便好用的专属小工具,第三方软件广告繁多、功能臃肿,还担心隐私泄露……想要一款纯本地、无广告、轻量化、功能齐全的桌面日程提醒工具,真的这么难吗?

今天就给大家带来一份超实用的干货教程!我们将用Python的PyQt5库,从零开发一款专属的桌面日程提醒工具,集桌面定时弹窗提醒、待办事项增删改查、时间自动监控、界面简洁美观于一体,完全本地运行,不用联网、没有广告,所有数据自己掌控,代码简单易懂,新手也能轻松上手。

这款工具不仅能解决日常效率痛点,还能让你快速掌握PyQt5界面开发、定时器使用、文件数据存储、弹窗提醒等核心技能,无论是自用还是学习PyQt5,都是绝佳的实战项目。接下来,我们就一步步拆解开发流程,从功能设计到代码实现,带你打造属于自己的高效日程助手!

一、项目核心功能预览

本次开发的日程提醒工具包含三大核心功能:

  1. 待办事项管理:支持添加任务名称、设置提醒时间、删除已完成/不需要的任务,实时展示所有待办;
  2. 桌面定时提醒:后台自动监控时间,到达设定时间立即弹出桌面提醒窗口,醒目不遗漏;
  3. 数据持久化:任务数据自动保存到本地文件,关闭软件再打开,待办事项不会丢失。

界面采用简约风格,布局清晰,操作简单,无需复杂配置,打开即用。

二、核心代码模块详细解析

我们将项目拆分为界面布局模块、核心功能模块、数据存储模块三部分,逐一讲解核心逻辑,让你看懂每一行代码的作用。

模块1:主界面布局设计(PyQt5基础布局+组件)

这是工具的”门面”,我们使用QVBoxLayout垂直布局+QHBoxLayout水平布局组合,搭配输入框、按钮、列表、标签等基础组件,搭建简洁易用的界面。

  • 顶部:任务名称输入框+提醒时间选择框,用于添加新待办;
  • 中部:添加/删除按钮,控制待办事项;
  • 底部:待办事项列表,实时展示所有任务;
  • 定时器:后台实时监控时间,触发提醒。

PyQt5的布局管理器会自动适配组件大小,不用手动调整位置,新手也能快速做出美观界面。

模块2:定时提醒核心功能(QTimer定时器+弹窗提醒)

这是工具的核心!我们使用PyQt5的QTimer定时器,每隔1秒刷新一次时间,对比当前时间与任务提醒时间,一旦匹配,立即触发QMessageBox弹窗提醒。

  • 定时器精度高,后台轻量运行,不占用电脑资源;
  • 弹窗采用信息提示框,置顶显示,确保你能第一时间看到提醒;
  • 时间对比精准到分钟,避免漏提醒、错提醒。

同时,我们绑定按钮的点击事件,实现添加任务、删除任务的交互逻辑,让界面和功能联动。

模块3:数据持久化存储(本地文件保存任务数据)

为了让关闭软件后任务不丢失,我们使用JSON文件存储待办数据。JSON格式轻量易读,Python自带json库即可操作,无需安装第三方数据库。

  • 添加任务时,自动将任务名称、提醒时间写入本地json文件;
  • 打开软件时,自动读取文件数据,加载到待办列表;
  • 删除任务时,同步更新文件数据,保证数据一致性。

三、完整项目代码

直接复制以下代码,保存为schedule_reminder.py,安装依赖后即可运行!

import sysimport jsonimport datetimefrom PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,                             QLabel, QLineEdit, QPushButton, QListWidget, QListWidgetItem,                             QMessageBox, QDateTimeEdit)from PyQt5.QtCore import QTimer, QDateTime, Qt# 本地数据存储文件DATA_FILE = "todo_list.json"classScheduleReminder(QMainWindow):def__init__(self):        super().__init__()        self.setWindowTitle("桌面日程提醒工具")  # 窗口标题        self.setFixedSize(500400)  # 固定窗口大小        self.todo_list = []  # 存储待办事项# 初始化UI界面        self.init_ui()# 加载本地存储的任务数据        self.load_todo_data()# 初始化定时器(每秒检查一次时间)        self.timer = QTimer(self)        self.timer.timeout.connect(self.check_reminder)        self.timer.start(1000)definit_ui(self):"""初始化界面布局"""# 主部件与布局        central_widget = QWidget()        self.setCentralWidget(central_widget)        layout = QVBoxLayout(central_widget)        layout.setSpacing(10)        layout.setContentsMargins(20202020)# 1. 任务名称输入区域        name_layout = QHBoxLayout()        name_label = QLabel("任务名称:")        self.task_input = QLineEdit()        self.task_input.setPlaceholderText("请输入待办事项(如:开会、写作业)")        name_layout.addWidget(name_label)        name_layout.addWidget(self.task_input)        layout.addLayout(name_layout)# 2. 提醒时间选择区域        time_layout = QHBoxLayout()        time_label = QLabel("提醒时间:")        self.time_input = QDateTimeEdit()# 设置默认时间为当前时间        self.time_input.setDateTime(QDateTime.currentDateTime())# 设置时间显示格式        self.time_input.setDisplayFormat("yyyy-MM-dd HH:mm")        time_layout.addWidget(time_label)        time_layout.addWidget(self.time_input)        layout.addLayout(time_layout)# 3. 功能按钮区域        btn_layout = QHBoxLayout()        self.add_btn = QPushButton("添加待办")        self.add_btn.clicked.connect(self.add_todo)  # 绑定添加事件        self.del_btn = QPushButton("删除选中")        self.del_btn.clicked.connect(self.delete_todo)  # 绑定删除事件        btn_layout.addWidget(self.add_btn)        btn_layout.addWidget(self.del_btn)        layout.addLayout(btn_layout)# 4. 待办事项列表        list_label = QLabel("待办事项列表:")        self.todo_list_widget = QListWidget()        layout.addWidget(list_label)        layout.addWidget(self.todo_list_widget)defload_todo_data(self):"""从本地文件加载待办数据"""try:with open(DATA_FILE, "r", encoding="utf-8"as f:                self.todo_list = json.load(f)# 刷新列表显示            self.refresh_list_widget()except FileNotFoundError:# 文件不存在则创建空列表            self.todo_list = []defsave_todo_data(self):"""保存待办数据到本地文件"""with open(DATA_FILE, "w", encoding="utf-8"as f:            json.dump(self.todo_list, f, ensure_ascii=False, indent=2)defrefresh_list_widget(self):"""刷新待办列表显示"""        self.todo_list_widget.clear()for todo in self.todo_list:            item_text = f"【{todo['time']}{todo['name']}"            item = QListWidgetItem(item_text)            item.setTextAlignment(Qt.AlignLeft)            self.todo_list_widget.addItem(item)defadd_todo(self):"""添加待办事项"""        task_name = self.task_input.text().strip()        task_time = self.time_input.dateTime().toString("yyyy-MM-dd HH:mm")# 校验输入ifnot task_name:            QMessageBox.warning(self, "提示""请输入任务名称!")return# 添加到任务列表        self.todo_list.append({"name": task_name, "time": task_time})# 保存数据        self.save_todo_data()# 刷新列表        self.refresh_list_widget()# 清空输入框        self.task_input.clear()        QMessageBox.information(self, "成功""待办事项添加成功!")defdelete_todo(self):"""删除选中的待办事项"""        selected_item = self.todo_list_widget.currentRow()if selected_item == -1:            QMessageBox.warning(self, "提示""请选择要删除的待办事项!")return# 删除对应任务del self.todo_list[selected_item]# 保存并刷新        self.save_todo_data()        self.refresh_list_widget()        QMessageBox.information(self, "成功""待办事项删除成功!")defcheck_reminder(self):"""检查是否到达提醒时间"""        now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M")for todo in self.todo_list:if todo["time"] == now:# 弹出提醒窗口                self.show_reminder(todo["name"])defshow_reminder(self, task_name):"""弹出桌面提醒"""        reminder = QMessageBox()        reminder.setWindowTitle("日程提醒")        reminder.setText(f"⏰ 提醒:{task_name}")        reminder.setIcon(QMessageBox.Information)        reminder.setWindowFlags(Qt.WindowStaysOnTopHint)  # 置顶显示        reminder.exec_()if __name__ == "__main__":    app = QApplication(sys.argv)    window = ScheduleReminder()    window.show()    sys.exit(app.exec_())

四、运行步骤

  1. 安装依赖:打开命令提示符,执行命令

    pip install pyqt5
  2. 运行代码:将代码保存后,直接运行schedule_reminder.py
  3. 使用工具:输入任务名称、选择提醒时间,点击「添加待办」即可;选中任务点击「删除选中」可删除;到达时间自动弹窗提醒。

五、知识点总结+拓展场景

核心知识点总结

  1. PyQt5界面开发:掌握主窗口、布局管理器(QVBoxLayout/QHBoxLayout)、基础组件(输入框、按钮、列表、时间选择器)的使用;
  2. 定时器应用QTimer实现后台定时任务,是桌面工具实时监控的核心;
  3. 事件绑定:按钮点击事件、定时器超时事件,实现界面交互逻辑;
  4. 数据持久化:JSON文件存储本地数据,轻量无依赖,适合小型工具数据管理;
  5. 弹窗提醒QMessageBox实现桌面置顶弹窗,满足提醒需求。

拓展场景

  1. 功能升级:添加任务分类、任务优先级、重复提醒(每日/每周)、提醒铃声;
  2. 界面美化:更换主题颜色、添加图标、调整窗口大小自适应;
  3. 数据升级:替换为SQLite数据库,支持更多任务数据管理;
  4. 打包分发:用PyInstaller打包为exe文件,无需Python环境,双击即可运行,分享给他人使用。

测试步骤

  1. 基础测试:添加任意任务,设置近一分钟后的时间,检查是否正常弹窗提醒;
  2. 数据测试:关闭软件重新打开,检查任务是否保留;
  3. 功能测试:测试添加空任务、删除未选中任务,校验提示是否正常;
  4. 精度测试:设置不同时间的任务,验证提醒时间是否精准。

这款小巧的日程提醒工具,完美解决了桌面待办管理和定时提醒的核心需求,代码简洁、功能实用,既是效率神器,也是PyQt5入门的绝佳实战项目。赶紧动手试试,打造属于自己的专属效率工具吧!

总结

  1. 本文用PyQt5实现了待办管理+定时提醒的桌面工具,代码完整可直接运行;
  2. 核心依赖PyQt5的布局、定时器、弹窗和JSON数据存储,新手易理解;
  3. 工具本地运行无广告,可拓展性强,能满足个性化效率需求。
本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » PyQt5打造桌面日程提醒工具

猜你喜欢

  • 暂无文章