Software-Rec
如何在一天中的特定時間顯示倒數計時器?
我是一名教師。我的課中有一些常式,在 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 秒以節省電力/性能)。你有它。
帶有 的 Python
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()