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


背景介绍

在现代快节奏的工作和生活中,人们常常因为专注于任务而忽略了休息、喝水、眼保健操等基本健康习惯。长时间的久坐和缺乏规律的作息不仅影响工作效率,还可能对身体健康造成不良影响。

为了解决这个问题,我们可以开发一个基于Python的桌面温馨提醒系统,通过图形界面(GUI)定时弹出提醒窗口,帮助用户养成良好的工作和生活习惯。该系统使用tkinter库构建界面,结合threading模块实现后台定时提醒功能,并支持提醒内容的自定义和保存,非常适合中级以下开发者学习和实践。


思路分析

本项目的核心目标是创建一个轻量级、易用、可自定义的桌面提醒系统,其主要功能包括:

  1. 图形界面设置:用户可以在界面上输入提醒内容、设置提醒频率。
  2. 启动/停止提醒:通过按钮控制提醒的开启和关闭。
  3. 定时提醒弹窗:系统在设定时间后弹出窗口,显示提醒信息,并在几秒后自动关闭。
  4. 多任务支持:支持多个提醒任务同时运行,例如“喝水提醒”、“站立提醒”等。
  5. 数据持久化:将用户的设置信息保存到本地文件中,下次启动时自动加载。

为了实现这些功能,我们将使用以下技术:

  • tkinter:用于构建图形用户界面。
  • threading:用于后台定时任务,避免界面卡顿。
  • time:用于控制提醒间隔。
  • json:用于保存和加载用户设置。

代码实现(Python)

以下是一个完整的Python实现代码,包含图形界面、提醒逻辑、文件读写等功能。

# reminder_app.py
import tkinter as tk
from tkinter import messagebox
import threading
import time
import json
import os

# 保存设置的文件路径
SETTINGS_FILE = "reminder_settings.json"

def load_settings():
    """从文件加载用户设置"""
    if os.path.exists(SETTINGS_FILE):
        with open(SETTINGS_FILE, 'r', encoding='utf-8') as f:
            return json.load(f)
    return {"message": "每小时休息5分钟。", "interval": 60}

def save_settings(message, interval):
    """保存用户设置到文件"""
    settings = {
        "message": message,
        "interval": interval
    }
    with open(SETTINGS_FILE, 'w', encoding='utf-8') as f:
        json.dump(settings, f)

class ReminderApp:
    def __init__(self, root):
        self.root = root
        self.root.title("桌面温馨提醒系统")
        self.root.geometry("400x200")
        self.root.resizable(False, False)

        # 加载设置
        self.settings = load_settings()
        self.message = self.settings["message"]
        self.interval = self.settings["interval"]

        # 提醒状态
        self.reminder_active = False
        self.reminder_thread = None

        # 创建UI组件
        self.create_widgets()

    def create_widgets(self):
        # 提醒内容输入
        tk.Label(self.root, text="提醒内容:").pack(pady=5)
        self.message_entry = tk.Entry(self.root, width=40)
        self.message_entry.insert(0, self.message)
        self.message_entry.pack(pady=5)

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

        # 启动/停止按钮
        self.start_button = tk.Button(self.root, text="启动提醒", command=self.start_reminder)
        self.start_button.pack(pady=10)

        self.stop_button = tk.Button(self.root, text="停止提醒", command=self.stop_reminder, state=tk.DISABLED)
        self.stop_button.pack(pady=5)

    def start_reminder(self):
        """启动提醒任务"""
        if self.reminder_active:
            return

        self.message = self.message_entry.get()
        self.interval = int(self.interval_entry.get())

        save_settings(self.message, self.interval)

        self.reminder_active = True
        self.start_button.config(state=tk.DISABLED)
        self.stop_button.config(state=tk.NORMAL)

        # 在子线程中运行提醒逻辑
        self.reminder_thread = threading.Thread(target=self.run_reminder, daemon=True)
        self.reminder_thread.start()

    def stop_reminder(self):
        """停止提醒任务"""
        self.reminder_active = False
        self.start_button.config(state=tk.NORMAL)
        self.stop_button.config(state=tk.DISABLED)

    def run_reminder(self):
        """定时提醒逻辑"""
        while self.reminder_active:
            time.sleep(self.interval * 60)
            if self.reminder_active:
                self.show_reminder()

    def show_reminder(self):
        """弹出提醒窗口"""
        # 使用Toplevel创建弹窗
        tip_window = tk.Toplevel(self.root)
        tip_window.title("温馨提醒")
        tip_window.geometry("300x120")
        tip_window.resizable(False, False)
        tip_window.attributes("-topmost", True)

        # 随机位置
        screen_width = tip_window.winfo_screenwidth()
        screen_height = tip_window.winfo_screenheight()
        x = random.randint(100, screen_width - 320)
        y = random.randint(100, screen_height - 140)
        tip_window.geometry(f"+{x}+{y}")

        # 美化样式
        tip_window.configure(bg="#F0F9FF")
        tip_window.overrideredirect(True)  # 去掉标题栏

        # 提示内容
        tip_label = tk.Label(
            tip_window,
            text=self.message,
            font=("微软雅黑", 12),
            bg="#F0F9FF",
            fg="#0369A1",
            wraplength=250
        )
        tip_label.pack(pady=20)

        # 自动关闭逻辑
        tip_window.after(5000, tip_window.destroy)

    def on_close(self):
        """关闭窗口时保存设置"""
        self.stop_reminder()
        self.root.destroy()

if __name__ == "__main__":
    root = tk.Tk()
    app = ReminderApp(root)
    root.protocol("WM_DELETE_WINDOW", app.on_close)
    root.mainloop()

项目总结

本项目实现了一个基于Python的桌面温馨提醒系统,通过图形界面(tkinter)让用户可以方便地设置提醒内容和频率,并使用threading模块实现后台定时提醒功能,避免界面卡顿。系统还支持将设置信息保存到本地文件中,下次启动时自动加载,增强了用户体验。

该项目具有以下特点:

  • 简单易用:用户只需在界面上输入内容和频率,即可启动提醒。
  • 健康关怀:帮助用户养成良好的工作和生活习惯。
  • 本地化运行:无需依赖网络或复杂框架,可在本地独立运行。
  • 学习价值:涵盖了GUI设计、多线程、时间控制、文件读写等核心技术点,适合中级以下开发者学习和实践。

扩展建议

  • 支持多种提醒类型:如“喝水提醒”、“站立提醒”、“眼保健操提醒”等。
  • 增加提醒声音:使用playsound库播放提示音效。
  • 支持日历同步:结合icalendar库实现日程提醒功能。
  • 增加提醒历史记录:将每次提醒记录保存到文件中,便于查看。

通过本项目,开发者可以深入理解Python在桌面应用开发中的能力,并掌握如何通过GUI设计和多线程实现定时提醒功能,为后续开发更复杂的提醒系统打下基础。


发表回复

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