如何在一天中的特定时间显示倒计时器?

如何在一天中的特定时间显示倒计时器?

我是一名教师。我的课程中有一些例程,通过 Orage 中的定时事件宣布,发送到通知。例如:

  • 清理
  • 把椅子放起来

我的学生要求我在屏幕上放一个倒计时,以警告距离活动还剩多少时间。我使用 XFce,因此它可以显示在屏幕顶部的面板上,永远不会被全屏项目覆盖,或者作为不可点击的透明平视显示器,始终出现在每个窗口上方。

例如:

  • 3:10 直到清理完毕。
  • 6点10分至下课。

这些不是手动激活的倒计时,而是在每天的特定时间发生,例如 10 分钟倒计时从下午 3:00 开始,到下午 3:10 归零结束。我可以用来orage激活脚本,但需要某种方式来显示计数器和信息。

有什么办法可以在屏幕上显示这样的倒计时器吗?

答案1

Python with tkinter‍‍ 输出创建 GUI 应用程序和小部件的最快、最简单的方法。使用创建 GUItkinter是一项简单的任务。

您只需要使用以下命令来安装tkinter

apt-get install python-tk python3-tk

对于 Fedora 用户,请使用以下命令。

dnf install python-tkinter python3-tkinter

这是一个简单的倒计时脚本tkinter,始终位于顶部且透明:

import tkinter as tk
from datetime import datetime, time

def dateDiffInSeconds(date1, date2):
    timedelta = date2 - date1
    return timedelta.days * 24 * 3600 + timedelta.seconds

def daysHoursMinutesSecondsFromSeconds(seconds):
    minutes, seconds = divmod(seconds, 60)
    hours, minutes = divmod(minutes, 60)
    days, hours = divmod(hours, 24)
    return (days, hours, minutes, seconds)

def counter_label(label):
    leaving_date = datetime.strptime('2022-01-01 01:00:00', '%Y-%m-%d %H:%M:%S')    #end time to count down
    def count():
        now = datetime.now()
        counter = daysHoursMinutesSecondsFromSeconds(dateDiffInSeconds(now, leaving_date))
        label.config(text=str("%d days, %d hours, %d minutes, %d seconds" % counter))
        label.after(1000, count)
    count()


root = tk.Tk()
root.attributes('-topmost', True)       #always on top
root.title("Counting Seconds")          #title
label = tk.Label(root, fg="dark green") #font color
label.pack()
counter_label(label)
button = tk.Button(root, text='Stop', width=25, command=root.destroy)   #stop button
button.pack()
root.wait_visibility(root)
root.wm_attributes('-alpha',0.5)    # transparent windows  0.1 - 1
root.mainloop()

图像

答案2

xfce4-genmon-插件,您可以自己创建这样的面板小部件。

从发行版的存储库安装插件。然后创建一个生成倒计时显示的脚本:

#!/usr/bin/env python3
from datetime import date, time, datetime

now = datetime.now()

def show_countdown(target, event):
    if now >= target:
        print(("{} NOW!").format(event))
        return

    time_left = target - now
    min, sec = divmod(time_left.seconds, 60)
    hrs, min = divmod(min, 60)
    print("{} in {}:{:02}:{:02}".format(event, hrs, min, sec))  

show_countdown(
    datetime.combine(date.today(), time(10, 25)),
    "Cleanup"
)
show_countdown(
    datetime.combine(date.today(), time(10, 30)),
    "Class ends"
)

根据您的需要对其进行修改,将其保存在某个不显眼的地方并授予其执行权限(chmod +x)。然后将“通用监视器”项目添加到面板中。将面板项指向您的脚本并配置合适的刷新间隔(如果您删除了秒显示,您可能应该将其保留为 30 秒以节省电量/性能)。现在你就得到了它。

答案3

有很多方法和小部件可以设置计时器或倒计时,但考虑到您正在使用 xfce 并希望在面板上显示一些图形化的内容,您可能需要尝试xfce4-计时器插件

但它确实需要 xfce >= 4.6。我不知道您正在运行哪个版本的 xfce,但这个插件可能非常适合您的需求。

如果您希望每天设置,则 xfce4-timer-plugin 允许您设置倒计时和带有重复选项的闹钟,例如:

在此输入图像描述

如果您愿意,它还会在面板中显示倒计时栏:

倒计时运行: 在此输入图像描述

倒计时为空:在此输入图像描述

您可以在上面的链接中阅读有关该插件的更多信息,但是,这里是关于和用法段落,以防万一:

关于

这是一个简单的插件,可让用户在指定时间或指定倒计时结束时运行警报。

用法

该插件非常简单 - 它显示一个进度条,显示已用时间的百分比。左键单击插件区域可打开可用警报的菜单。选择一项后,用户可以通过选择同一菜单中的“启动/停止计时器”条目来启动或停止计时器。新警报通过首选项窗口添加。每个警报要么是倒计时,要么是在指定时间运行。默认情况下,倒计时结束时会弹出一个简单的对话框。用户可以选择要运行的外部命令作为警报,也可以选择以给定的重复间隔重复指定的次数。

答案4

您可以使用 crontab 和使用yad.

例如,15:10 进行清理,倒计时从 15:00 开始,18:10 下课,倒计时从 18:00 开始:

创建倒计时脚本:

#!/bin/bash
export max=$1
export action=$2
for i in `seq $max`
do
  echo "$[i* 100/max]"
  echo "#${action} in $[max-i] second" 
  sleep 1
done | yad --on-top --progress --no-buttons --auto-close

编辑有权访问显示的用户的 crontab(我想它应该是您自己的用户),DISPLAY如果echo $DISPLAY您的 shell 中的变量不同于:0

crontab -e

0 15 * * *  DISPLAY=:0 /path/to/script.sh 600 Cleanup
0 18 * * *  DISPLAY=:0 /path/to/script.sh 600 "End of Class"

相关内容