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


8

我是老师。我的课程中有某些例程,在Orage中通过定时事件宣布,并发送到通知中。例如:

  • 清理
  • 放椅子

我的学生要求我在屏幕上放置一个倒计时时钟,以警告事件发生还剩下多少时间。我使用XFce,因此它既可以显示在屏幕顶部的面板上,也不会被全屏项目覆盖,或者可以显示为始终不可显示的透明抬头显示,该显示始终显示在每个窗口的上方。

例如:

  • 3:10直到清理。
  • 6:10直到上完课。

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

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


2
一个始终保持在顶部的时髦小部件可能会达到目的
muru

1
可以从bash启动和控制所有X11程序。并且不要使用while循环进行繁忙的等待,可以使用sleep
ctrl-alt-delor

您是否已经考虑过(每周(星期一-星期五)或每天)cron工作是否合适?我确信它可以激活上述conky小部件,开始倒计时。
Nepumuk

我不知道它是如何工作的。

@村:正如此处评论中所讨论的,unix.stackexchange.com/questions/535666/…当您谈论full screen您时,您的意思实际上是对的maximized,对吧?
Arkadiusz Drabczyk

Answers:


2

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

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

#!/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秒以节省功耗/性能)。那里有它。


那么,是否xfce4-genmon-plugin只运行选择的脚本,打印在终端中显示的内容,而不是在面板上显示的内容?
村庄

那就对了。我链接的页面上还描述了一些格式标记。
user3840170

4

Python和tkinter输出创建GUI应用程序和插件的终南捷径。使用创建GUI tkinter是一项容易的任务。

您只需要使用以下命令来安装 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()

图片


我使用了fluxbox此解决方案对我不起作用。标题为Counting seconds左的窗口显示在左上角,但被全屏窗口阻止。例如,在Firefox或Evince中按F11键,注意该窗口不可见。
Arkadiusz Drabczyk

我已经在xfce4室内运行,Xephyr并且tkinter全屏应用程序也阻止了Windows。因此,我认为这个答案是错误的,不能回答OP的问题。
Arkadiusz Drabczyk

如果您在Firefox中按f11键,您将看不到其他任何东西,甚至xfce时钟和其他xfce插件。所以所有其他答案也是错误的。我认为通过全屏显示她/他意味着最大化窗口,因为她/他说“这可以显示在屏幕顶部的面板上,” @Arkadiusz Drabczyk
Rasool Ziafaty

i think by full screen she/he means maximized windows-我也认为,但是在这种情况下,应该改写这个问题。
Arkadiusz Drabczyk

是的,即使窗口是全屏状态,它也必须是可见的,因此它是透明层或在面板上,但是必须更改某些设置,以便该面板始终可见,并且如果解决方案使用使用面板。
村庄

2

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

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

xfce4-timer-plugin允许您设置倒计时和带有重复选项的警报(如果您希望每天进行设置),例如:

在此处输入图片说明

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

倒计时正在运行: 在此处输入图片说明

倒计时为空: 在此处输入图片说明

您可以在上面的链接中了解有关插件的更多信息,但是,以下情况是关于和用法的段落,以防万一:

关于

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

用法

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


此应用是否允许将倒数计时器设置为在给定时间自动开始?由于条形不是很容易看到,有没有办法将其外观从条形更改为计数计时器?

警报似乎是可编程的,但倒数仅允许持续一段时间。据我所知,没有改变酒吧的选择。您可以在XFCE ex。中使用Gnome小部件吗?
Leo)

@Village如果我编辑此计时器插件以使其在给定时间处理自动启动,是否值得赏金?您的xfce版本和版本是什么?
intika

计时器应用程序的两个问题是,由于小条太小,很难看到它,因此倒计时时钟更好,并且不会自动启动。
村庄

1

您可以使用crontab,并使用bash脚本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"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.