基于Python的桌面温馨提醒系统



背景介绍

在现代快节奏的工作和生活中,长时间面对电脑、手机等设备已成为常态。然而,这种持续的高强度工作模式往往会导致用户忽略基本的健康行为,如定时休息、喝水、眼保健操等。为了帮助用户建立规律的作息和健康习惯,我们设计并实现了一个基于Python的桌面温馨提醒系统

该系统通过图形界面(GUI)让用户自由设置提醒内容和频率,并在设定的时间间隔后自动弹出提醒窗口,提醒用户注意休息或执行其他健康行为。系统使用tkinter构建用户界面,结合threading模块实现后台定时任务,确保界面响应流畅,同时支持将用户设置保存到本地文件,便于下次启动时自动加载。


思路分析

本项目的核心目标是构建一个轻量级、可独立运行、具备用户交互功能的桌面提醒工具。以下是实现该系统的几个关键设计思路:

  1. 图形用户界面(GUI)设计
    使用tkinter库构建主界面,包括:

    • 提醒内容输入框
    • 提醒频率输入框
    • 启动/停止按钮
    • 状态提示标签
  2. 多线程处理
    由于提醒功能需要在后台定时执行,而GUI主线程不能被阻塞,因此使用threading模块创建一个后台线程,用于执行定时提醒任务。

  3. 定时提醒逻辑
    使用time.sleep()控制提醒间隔,每次到达设定时间后,通过tkinter弹出一个独立的提醒窗口,并在几秒后自动关闭。

  4. 数据持久化
    用户设置的提醒内容和频率需要在程序关闭后仍然保留。因此,我们使用json模块将配置信息保存到本地文件中,并在程序启动时自动加载。

  5. 弹窗提醒设计
    弹窗需具备以下特点:

    • 显示提醒内容
    • 自动关闭(避免用户忘记关闭)
    • 置顶显示(确保提醒不会被其他窗口遮挡)

代码实现(Python + Tkinter)

以下为完整的代码实现,使用Python语言编写,依赖tkinterthreadingtimejson模块,无需额外安装第三方库即可运行。

import tkinter as tk
import threading
import time
import os
import json

# 配置文件路径
CONFIG_FILE = "reminder_config.json"

# 读取配置文件
def load_config():
    if os.path.exists(CONFIG_FILE):
        with open(CONFIG_FILE, 'r', encoding='utf-8') as f:
            return json.load(f)
    return {"content": "每小时休息5分钟。", "interval": 60}

# 保存配置文件
def save_config(content, interval):
    config = {"content": content, "interval": interval}
    with open(CONFIG_FILE, 'w', encoding='utf-8') as f:
        json.dump(config, f)

# 弹窗提醒函数
def show_reminder(content):
    # 创建一个新窗口用于提醒
    reminder = tk.Toplevel()
    reminder.title("温馨提醒")
    reminder.geometry("300x150")
    reminder.attributes("-topmost", True)  # 窗口置顶
    tk.Label(reminder, text=content, font=("微软雅黑", 14), wraplength=280).pack(pady=20)
    # 5秒后自动关闭窗口
    reminder.after(5000, reminder.destroy)

# 定时提醒任务(运行在后台线程中)
def start_reminder(content, interval):
    while True:
        time.sleep(interval * 60)  # 等待指定分钟数
        threading.Thread(target=show_reminder, args=(content,)).start()

# 启动提醒按钮回调
def on_start():
    content = entry_content.get()
    interval = int(entry_interval.get())
    save_config(content, interval)
    threading.Thread(target=start_reminder, args=(content, interval), daemon=True).start()
    status_label.config(text="提醒已启动", fg="green")

# 停止提醒按钮回调
def on_stop():
    status_label.config(text="提醒已停止", fg="red")

# 初始化界面
def init_ui():
    global entry_content, entry_interval, status_label

    # 设置主窗口
    root.title("桌面温馨提醒系统")
    root.geometry("400x300")
    root.resizable(False, False)

    # 提醒内容输入
    tk.Label(root, text="提醒内容:").pack(pady=5)
    entry_content = tk.Entry(root, width=40)
    entry_content.pack(pady=5)
    entry_content.insert(0, load_config()['content'])

    # 提醒频率输入
    tk.Label(root, text="提醒频率(分钟):").pack(pady=5)
    entry_interval = tk.Entry(root, width=10)
    entry_interval.pack(pady=5)
    entry_interval.insert(0, str(load_config()['interval']))

    # 启动/停止按钮
    tk.Button(root, text="启动提醒", command=on_start, width=15).pack(pady=10)
    tk.Button(root, text="停止提醒", command=on_stop, width=15).pack(pady=10)

    # 状态标签
    status_label = tk.Label(root, text="提醒未启动", fg="blue", font=("微软雅黑", 10))
    status_label.pack(pady=10)

# 主程序入口
if __name__ == "__main__":
    root = tk.Tk()
    init_ui()
    root.mainloop()

代码说明与注释

  • load_config()save_config():用于从本地文件读取和保存用户设置,使用json格式存储,便于解析和扩展。
  • show_reminder(content):创建一个Toplevel窗口,显示提醒内容,并设置5秒后自动关闭。
  • start_reminder(content, interval):在后台线程中循环等待指定时间后触发提醒,使用threading.Thread避免阻塞主线程。
  • on_start()on_stop():绑定到“启动提醒”和“停止提醒”按钮的回调函数,控制提醒任务的开启与关闭。
  • init_ui():初始化GUI界面,设置输入框、按钮和状态标签。

总结

通过本项目,开发者可以掌握以下几个关键技能:

  • GUI设计:使用tkinter构建用户界面,理解布局和事件绑定机制。
  • 多线程操作:使用threading模块实现后台任务,避免界面卡顿。
  • 时间控制与任务调度:结合time.sleep()实现定时提醒逻辑。
  • 文件读写:使用json模块实现用户配置的持久化存储。
  • 弹窗交互:设计并实现自动关闭的提醒弹窗,提升用户体验。

该系统不仅具有实际应用价值,还具备良好的扩展性。例如,可以进一步添加:
– 多个提醒任务的管理
– 提醒音效(使用playsound库)
– 提醒历史记录
– 与日历同步功能


扩展建议

  1. 支持多个提醒任务
    可以使用列表或字典结构存储多个提醒任务,并为每个任务单独启动线程。

  2. 添加声音提醒
    使用playsound库播放提示音,增强提醒效果。

  3. 增加历史记录功能
    每次提醒时记录时间和内容,保存到文件中,便于用户查看提醒历史。

  4. 跨平台支持
    使用Plyer库实现系统级通知,兼容Windows、macOS和Linux。


通过这个项目,开发者可以深入理解Python在桌面应用开发中的能力,同时掌握GUI编程、线程控制和数据持久化等关键技术点,为后续开发更复杂的桌面工具打下坚实基础。


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注