Software-Rec

如何在一天中的特定時間顯示倒數計時器?

  • September 27, 2019

我是一名教師。我的課中有一些常式,在 Orage 中通過定時事件宣布,發送到通知。例如:

  • 清理
  • 把椅子放起來

我的學生要求我在螢幕上放一個倒計時時鐘,以提醒距離活動還有多少時間。我使用 XFce,因此它既可以顯示在螢幕頂部的面板上,從不被全屏項目覆蓋,也可以作為始終出現在每個視窗上方的不可點擊的透明平視顯示器。

例如:

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

這些不是手動啟動的倒計時,而是在每天的特定時間發生,例如 10 分鐘倒計時從下午 3:00 開始,到下午 3:10 零結束。我可以orage用來啟動腳本,但需要一些方法來顯示計數器和資訊。

有沒有辦法在螢幕上顯示這樣的倒計時?

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

帶有 ‍‍ 的 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()

圖片

引用自:https://unix.stackexchange.com/questions/535666