自定義事件提醒程式

红雨烟横泪洇裳發表於2024-03-10

因為各大軟體無法實現每隔自定義固定天數進行事件提醒的功能,在此用Python寫了一個簡易的Windows端事件提醒彈窗程式。
注意沒有做介面,只是把事件寫死在了程式中,設定為開機自啟動,掛在後臺一直執行(cpu佔用率幾乎為0%),到點就會進行彈窗提醒。

Step 0. 環境配置

建議新建一個環境,後面用於打包時可以減小程式負擔。
本程式需要的環境如下:

  1. tkinter(Python自帶,無需安裝)
  2. schedule庫pip install schedule
  3. PyInstaller 打包程式為可執行程式(pip install pyinstaller

Step 1. 程式主體

import datetime
import time
import tkinter as tk
from tkinter import messagebox

import schedule


def infoBox(message: str):
    """
    顯示系統彈窗
    :param message: 顯示的資訊
    """
    # 初始化Tkinter
    root = tk.Tk()
    # 視窗置頂
    root.attributes("-topmost", True)
    # 隱藏主視窗
    root.withdraw()
    # 彈出訊息框
    messagebox.showinfo("事件提醒OvO!", message)
    # 關閉Tkinter
    root.destroy()


def isToday(start_date, period_days):
    """
    從某一日開始,每經過幾天,判斷當天是否是迴圈提醒的日期
    :param start_date: 從某一日開始
    :param period_days: 每經過幾天
    :return: 返回是/否
    """
    # 今天的日期
    today = datetime.datetime.now().date()
    # 計算距離設定的日期到今天為止的天數
    days = (today - start_date).days  # 注:3月5日 - 3月2日 = 3天
    if period_days < 0:
        infoBox("period_days不能小於0")
        return False
    else:
        if period_days == 0:  # 表示每一天
            return True
        elif days % period_days == 0:
            return True
        else:
            return False


def events():
    """
    TODO: 設定提醒事件
    """
    # 從程式執行時開始,每2小時提醒
    schedule.every(2).hours.do(infoBox, "提醒的內容")

    # 每天18:00的固定時間提醒
    schedule.every().day.at("18:00").do(infoBox, "提醒的內容")

    # 從2024年3月1日開始,每隔3天,在22:00固定時間提醒
    if isToday(start_date=datetime.date(2024, 3, 1), period_days=3):
        schedule.every().day.at("22:00").do(infoBox, "提醒的內容")


if __name__ == '__main__':
    infoBox("定時任務程式已啟動!")
    events()
    try:
        while True:
            schedule.run_pending()
            time.sleep(10)  # 減少CPU消耗
    except:
        infoBox("定時任務已經停止")

Step 2. 打包程式

使用 PyInstaller 對 Python 指令碼進行打包,獲得可執行檔案(.exe)。

Step 3. 設定開機自啟動

使用Windows的 任務計劃程式 將打包好的可執行檔案設定為開機自啟動。(在搜尋欄中直接搜尋“任務計劃程式”即可)
詳情可參考:https://blog.csdn.net/baidu_38493460/article/details/118081809
若要關閉程式,只能在工作管理員中強行關閉。

相關文章