一个小闹钟

目标

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

解决

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

以下为完整代码

 1 #!/usr/bin/python
2# -*- coding: utf-8 -*-
3
4import turtle as ttle
5import sys
6import time
7
8#时间是直接获取执行程序时的系统时间
9time = time.strftime("%H:%M:%S", time.localtime())
10#闹钟提示文字以命令参数形式传入,若命令参数为空,则设置成默认的'闹钟'
11try:
12    tips = sys.argv[1]
13except IndexError:
14    tips = '闹钟'
15
16#设置标题和窗口大小
17ttle.setup(700500300300)
18ttle.title('[MyAlarm]')
19
20#将画笔移到绘制时间的地方
21ttle.penup()
22ttle.goto(-(len(time)/2)*3550)
23ttle.pendown()
24#绘制时间
25ttle.pencolor('red')
26ttle.write(time, True, font=('Arial'48'normal'))
27
28#将画笔移到绘制提示文字的地方
29ttle.penup()
30ttle.goto(-(len(tips)/2)*(50/3), -100)
31ttle.pendown()
32#绘制文字
33ttle.pencolor('blue')
34ttle.write(tips, True, font=('Arial'36'normal'))
35
36alarm = ttle.Screen()
37alarm.exitonclick()  #点击窗口任意位置退出

直接执行的效果

  • 无命令参数时

  • 有命令参数时

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

实现定时执行

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


尾声

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

后续补充

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

  • 脚本内容:
1#!/bin/bash
2
3echo -n "输入提醒时间([HH]:[MM]): "
4read time
5echo -n "输入提醒内容: "
6read var0
7echo "export DISPLAY=:1 && /home/ubuntu/alarm.py ${var0}" | at ${time}
  • 执行效果:

  • 到时间之后效果:

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