AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 535666
Accepted
Village
Village
Asked: 2019-08-15 18:24:30 +0800 CST2019-08-15 18:24:30 +0800 CST 2019-08-15 18:24:30 +0800 CST

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

  • 772

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

  • 清理
  • 把椅子放起来

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

例如:

  • 3:10 直到清理。
  • 6:10 到下课。

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

有没有办法在屏幕上显示这样的倒计时?

software-rec
  • 4 4 个回答
  • 919 Views

4 个回答

  • Voted
  1. Rasool Ziafaty
    2019-09-21T21:40:11+08:002019-09-21T21:40:11+08:00

    带有 ‍‍ 的 Pythontkinter输出创建 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()
    

    图片

    • 6
  2. Best Answer
    user3840170
    2019-09-21T07:44:11+08:002019-09-21T07:44:11+08:00

    使用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 秒以节省电力/性能)。你有它。

    • 3
  3. Leo
    2019-09-24T15:06:15+08:002019-09-24T15:06:15+08:00

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

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

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

    在此处输入图像描述

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

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

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

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

    关于

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

    用法

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

    • 2
  4. Saïmonn
    2019-09-26T07:54:08+08:002019-09-26T07:54:08+08:00

    您可以使用 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"
    
    • 2

相关问题

  • 适用于 Linux 的舒适离线语音识别软件?

  • Linux 音乐制作软件

  • 在 MIPS 上运行为 IRIX 制作的旧程序的方法?

  • 寻找终端下载管理器

  • dd_rescue 和 ddrescue 有什么区别,什么时候更喜欢哪一个?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve