实现久坐定时提醒

步骤 1: 导入必要的库

首先,我们需要导入我们将要使用的所有库。

import threading  
import time  
import pystray  
from PIL import Image, ImageDraw, ImageFont  
import tkinter as tk  
from tkinter import messagebox

步骤 2: 创建 TrayIcon 类

创建一个TrayIcon类,它将负责所有与托盘图标相关的逻辑。

class TrayIcon:  
    def __init__(self):  
        # 初始化成员变量  
        self.exit_event = threading.Event()  
        self.icon = self.create_icon()  # 假设我们有一个方法来创建图标  
        self.tray_thread = None  
  
    def create_icon(self):  
        # 创建一个简单的图标(这里只是一个红色的方块作为示例)  
        icon = Image.new('RGB', (16, 16), color=(255, 0, 0))  
        # ... 可以在这里添加更多图标创建逻辑 ...  
        return icon  
  
    def quit_tray_icon(self, icon, menu_item):  
        # 当用户点击退出时调用的回调函数  
        self.exit_event.set()  
        icon.stop()  
  
    def show_reminder(self):  
        # 显示提醒的函数  
        root = tk.Tk()  
        root.withdraw()  # 隐藏主窗口  
        messagebox.showinfo("提醒", "请站起来活动一下,避免久坐!")  
  
    def run_tray_icon(self):  
        # 运行托盘图标的函数  
        menu = pystray.Menu(pystray.MenuItem("Exit", self.quit_tray_icon))  
        icon = pystray.Icon("My App", self.icon, "My App", menu)  
        icon.run()  
  
    def start(self):  
        # 启动托盘图标和定时任务的函数  
        self.tray_thread = threading.Thread(target=self.run_tray_icon, daemon=True)  
        self.tray_thread.start()  
  
        # 启动定时任务(这里用简单的循环模拟)  
        self.start_reminder_scheduler()  
  
    def start_reminder_scheduler(self):  
        # 定时任务的逻辑,这里使用简单循环模拟  
        while not self.exit_event.is_set():  
            # 模拟每45分钟显示一次提醒(这里用秒来模拟)  
            if time.time() % 2700 < 10:  # 假设2700秒是45分钟(仅为示例)  
                self.show_reminder()  
            time.sleep(1)  
  
    def stop(self):  
        # 停止托盘图标和定时任务的函数  
        self.exit_event.set()  
        if self.tray_thread is not None:  
            self.tray_thread.join(timeout=1)  # 等待托盘图标线程结束,但设置超时  
  
### 步骤 3: 使用 TrayIcon 类  
  
在主程序中,我们创建一个`TrayIcon`实例,并调用其`start`方法来启动托盘图标和定时任务。然后,我们让主线程保持运行,直到接收到`KeyboardInterrupt`异常,此时调用`stop`方法来停止所有操作。  
  
```python  
if __name__ == "__main__":  
    tray_icon = TrayIcon()  
    tray_icon.start()  
  
    try:  
        # 主线程可以保持运行,或者执行其他任务  
        while True:  
            time.sleep(1)  
    except KeyboardInterrupt:  
        tray_icon.stop()  
        print("程序已退出")

本程序经过多轮Baidu文心一言Prompt及自我测试实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值