一个小闹钟

目标

需要在指定时间获得提醒,不响铃,要有视觉上的提示,环境为Ubuntu,未安装并且暂不安装闹钟类应用程序,想要使用代码及命令行进行简单实现。

解决

  • 主体思路
    Ubuntu下的at命令可以很方便地实现一次性提醒,视觉上的提示借助Python的turtle库完成
  • 具体思路
    • 获得时间和提示内容分别存入变量timetips
      • 提示内容从命令参数获取,若没有则设置为默认值 闹钟
    • 使用turtle的write()完成时间及提示内容的绘制
    • 使用at命令设置定时任务,在指定时间执行这一代码
  • 后续补充
    • 在命令行里可以正常使用, 所以将shell命令写进shell脚本 alarm.sh ,加入交互文字,方便使用.

以下为完整代码

 #!/usr/bin/python
# -*- coding: utf-8 -*-

import turtle as ttle
import sys
import time

#时间是直接获取执行程序时的系统时间
time = time.strftime("%H:%M:%S", time.localtime())
#闹钟提示文字以命令参数形式传入,若命令参数为空,则设置成默认的'闹钟'
try:
    tips = sys.argv[1]
except IndexError:
    tips = '闹钟'

#设置标题和窗口大小
ttle.setup(700, 500, 300, 300)
ttle.title('[MyAlarm]')

#将画笔移到绘制时间的地方
ttle.penup()
ttle.goto(-(len(time)/2)*35, 50)
ttle.pendown()
#绘制时间
ttle.pencolor('red')
ttle.write(time, True, font=('Arial', 48, 'normal'))

#将画笔移到绘制提示文字的地方
ttle.penup()
ttle.goto(-(len(tips)/2)*(50/3), -100)
ttle.pendown()
#绘制文字
ttle.pencolor('blue')
ttle.write(tips, True, font=('Arial', 36, 'normal'))

alarm = ttle.Screen()
alarm.exitonclick()  #点击窗口任意位置退出

直接执行的效果

  • 无命令参数时
    旧文-小闹钟

    旧文-小闹钟
  • 有命令参数时
    旧文-小闹钟
    旧文-小闹钟

    正常运行,接下来让计算机在指定时间运行这个程序就好了

实现定时执行

设置at定时任务
我们知道,用 at 给GUI程序设置定时任务,需要指定显示器,不然执行会不成功

旧文-小闹钟
旧文-小闹钟

尾声

简陋的提醒程序就是这样,算是能用。后期可以加入响铃,也可以干脆写个闹钟出来,Python的GUI库:tkinterpyqt5用起来很方便。下载一个闹钟也没毛病,但这样就没那么有意思了。

后续补充

因为发现每次要敲那么一长串命令太麻烦,所以我又跑回来完善了一下,将命令集成到shell脚本里方便一些

  • 脚本内容:
#!/bin/bash

echo -n "输入提醒时间([HH]:[MM]): "
read time
echo -n "输入提醒内容: "
read var0
echo "export DISPLAY=:1 && /home/ubuntu/alarm.py ${var0}" | at ${time}
  • 执行效果:

    旧文-小闹钟
  • 到时间之后效果:

    旧文-小闹钟

此为旧文,图片水印为我的CSDN账号,无妨