目标
需要在指定时间获得提醒,不响铃,要有视觉上的提示,环境为Ubuntu,未安装并且暂不安装闹钟类应用程序,想要使用代码及命令行进行简单实现。
解决
- 主体思路
Ubuntu下的at命令可以很方便地实现一次性提醒,视觉上的提示借助Python的turtle库完成 - 具体思路
- 获得时间和提示内容分别存入变量
time
和tips
- 提示内容从命令参数获取,若没有则设置为默认值
闹钟
- 提示内容从命令参数获取,若没有则设置为默认值
- 使用turtle的write()完成时间及提示内容的绘制
- 使用at命令设置定时任务,在指定时间执行这一代码
- 获得时间和提示内容分别存入变量
- 后续补充
- 在命令行里可以正常使用, 所以将shell命令写进shell脚本
alarm.sh
,加入交互文字,方便使用.
- 在命令行里可以正常使用, 所以将shell命令写进shell脚本
以下为完整代码
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(700, 500, 300, 300)
18ttle.title('[MyAlarm]')
19
20#将画笔移到绘制时间的地方
21ttle.penup()
22ttle.goto(-(len(time)/2)*35, 50)
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库:tkinter
和pyqt5
用起来很方便。下载一个闹钟也没毛病,但这样就没那么有意思了。
后续补充
因为发现每次要敲那么一长串命令太麻烦,所以我又跑回来完善了一下,将命令集成到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账号,无妨