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


8

私は教師をしています。私のレッスンには、Orageの時間指定イベントで通知され、通知に送信される特定のルーチンがあります。例えば:

  • 掃除
  • 椅子を立てる

生徒たちは、イベントまでの残り時間を警告するために、画面にカウントダウン時計を置くように要求しました。私はXFceを使用しているので、これは画面上部のパネルに表示されるか、全画面アイテムで覆われることはありません。

例えば:

  • 3:10クリーンアップまで。
  • 6:10授業終了まで。

これらは手動でアクティブ化されるカウントダウンではありませんが、毎日特定の時間に発生します。たとえば、10分のカウントダウンは午後3時に始まり、午後3時10分にゼロで終わります。を使用orageしてスクリプトをアクティブ化できますが、カウンターと情報を表示する方法が必要です。

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


2
always-on-topを備えたconkyウィジェットがうまくいくかもしれません
muru

1
すべてのX11プログラムを開始し、bashから制御できます。また、whileループを使用してビジー待機を行わないでくださいsleep
ctrl-alt-delor

(毎週(月-金)または毎日)cronジョブが適切であるとすでに考えていましたか?カウントダウンを始めて、上記のconkyウィジェットをアクティブ化できると確信しています。
ネプムク

それがどのように機能するのか私はよく知りません。

@Village:ここのコメントで説明されているように、unix.stackexchange.com / questions / 535666 / あなたが話しているとき、あなたはfull screen実際に意味しますよねmaximized
Arkadiusz Drabczyk

回答:


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秒のままにしておく必要があります)。そして、そこにあります。


それでは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内部Xephyrtkinterウィンドウがフルスクリーンアプリケーションによってブロックにもされます。だから私はこの答えは間違っていると思い、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 for ex。でGnomeウィジェットを使用できますか?
レオ

@Villageこのタイマープラグインを編集して、特定の時間に自動起動を処理できるようにした場合、賞金に見合う価値がありますか?、xfceのディストリビューションとバージョンは何ですか?
インティカ

タイマーアプリの2つの問題は、小さなバーが小さすぎるために表示するのが非常に難しいため、カウントダウンクロックの方が優れていて、自動的に起動しないことです。
Village

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が以下と異なる場合は変数を調整します: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"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.