利用Python实现闹钟功能

今天心血来潮,想用Python实现一个类似于闹钟的事项提示工具。在坐各位都知道,平常敲代码总是会忘记时间一坐一上午,这样对身体是不好的,所以我今天就要使用Python实现定时提醒功能。

在敲代码之前大致分析一下需要使用到的模块。

  • 语音播报模块(pyttsx3)

    pip install pywin32
    pip install pyttsx3
  • 定时任务模块(apscheuler)

    pip install apscheuler
  • 弹窗模块(win32api)

    pip install win32api

脚本逻辑。

  • 获取用户输入的代办事项

    请输入您的代办事项:喝水

  • 获取用户输入的执行时间(单位:min)

    请输入您的执行时间:30

  • 根据用户输入的执行时间,设置触发器

    apscheuler 添加弹窗定时任务

  • 触发器执行,在桌面弹出弹出并且语音提示

    执行弹窗任务 (win32api.MessageBox)

    执行语音提示功能 (pyttsx3.say())

下面附上代码

# 语音播报模块
import pyttsx3 

# 使用windows的弹窗模块
import win32api,win32con

# 导入aoscheduler里的调度器
from  apscheduler.schedulers.blocking import BlockingScheduler

# 配置调度器的语言和时区
sche = BlockingScheduler(timezone="Asia/Shanghai")

# 日期模块
import datetime


# 捕获用户输入
affair = input("请输入您的代办事项:")

times = input("请输入事项执行时间(min): ")


# 任务函数
def my_job(affair):
    # 初始化pyttsx3
    engine= pyttsx3.init() 
    
    # 播放文字语言/默认女生
    engine.say(f"滴滴滴滴滴滴滴滴!您的{affair}事项以到达执行时间")
    
    # 执行缓存的命令并等待完成
    engine.runAndWait()
    
    # 弹窗提示
    win32api.MessageBox(0,f"您的{affair}事项已到达执行时间","这是周奕呈的闹钟脚本",win32con.MB_OK)
    
    # 关闭apscheduler调度器
    sche.shutdown(wait=False)

# 定时函数
def timing():
    
    if affair=="" or times=="":
        
        engine = pyttsx3.init() 
    
        engine.say("输入错误")

        engine.runAndWait()
        
        win32api.MessageBox(0,"请输入正确的代办事项以及执行时间","这是周奕呈的闹钟脚本",win32con.MB_ICONWARNING)
        
    
    else:
        
        try:
            # 添加定时任务 date:某个特定时间仅运行一次 args:以tuple的形式传参
            sche.add_job(my_job,'date',run_date=datetime.datetime.now()+datetime.timedelta(minutes=times),args=[affair]) #若想修改定时时间类型则修改minutes 例:seconds=times
            # 启动调度器
            sche.start()
            
        except Exception as e:
            print(e)
            
            engine = pyttsx3.init()
            
            engine.say("输入错误")

            engine.runAndWait()
            
            win32api.MessageBox(0,"请输入正确的代办事项以及执行时间","这是周奕呈的闹钟脚本",win32con.MB_ICONWARNING)

            
    
if __name__=="__main__":
    timing()

在此放上该项目地址,供大家使用。

GitHub:https://github.com/renaissancezyc/regularly_remind

Gitee:https://gitee.com/renaissancezyc/regularly_remind