一日の特定の時間にカウントダウンタイマーを表示するにはどうすればよいですか?

一日の特定の時間にカウントダウンタイマーを表示するにはどうすればよいですか?

私は先生です。私のコースには、Orageのタイムアウトイベントを通じて発表され、通知に送信されるいくつかのルーチンがあります。たとえば、

  • 掃除する
  • 椅子を立てる

学生は、活動までの残り時間を警告するために、画面にカウントダウンタイマーを表示するように依頼しました。私は、XFceを使用してフルスクリーンアイテムで覆われていない画面上部のパネルとして表示されるか、常にすべてのウィンドウの上に表示されるクリックできない透明なヘッドアップディスプレイとして表示されることがあります。

たとえば、

  • 3時10分から掃除されるまで。
  • 6時10分から授業が終わるまで。

これは手動でアクティブになるカウントダウンではなく、毎日特定の時間に発生します。たとえば、10分のカウントダウンは午後3時に始まり、午後3時10分に0時に終了します。アクティベーションスクリプトを使用できますが、orageカウンタと情報を表示する方法が必要です。

このようなカウントダウンタイマーを画面に表示する方法はありますか?

答え1

‍‍出力機能を備えたPython tkinterGUIアプリケーションとウィジェットを作成する最も簡単で簡単な方法です。 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()

ビデオ

答え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

シェルの変数が次のものと異なる場合は、DISPLAYディスプレイにアクセスできるユーザーのcrontabを編集します(私のユーザーでなければなりません)。echo $DISPLAY: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"

関連情報