Wie werden Countdown-Timer zu bestimmten Tageszeiten angezeigt?

8

Ich arbeite als Lehrer. In meiner Lektion gibt es bestimmte Routinen, die mit zeitgesteuerten Ereignissen in Orage angekündigt und an Benachrichtigungen gesendet werden. Z.B:

  • Aufräumen
  • Stühle aufstellen

Meine Schüler baten mich, eine Countdown-Uhr auf den Bildschirm zu stellen, um zu warnen, wie viel Zeit bis zu einem Ereignis verbleibt. Ich verwende XFce, daher kann dies entweder in einem Bereich am oberen Bildschirmrand angezeigt werden, der nie von Vollbildelementen abgedeckt wird, oder als nicht anklickbares, transparentes Heads-up-Display, das immer über jedem Fenster vorhanden ist.

Z.B:

  • 3:10 bis zum Aufräumen.
  • 6:10 bis zum Ende des Unterrichts.

Dies sind keine Countdowns, die manuell aktiviert werden, sondern jeden Tag zu bestimmten Zeiten stattfinden, z. B. beginnt ein 10-minütiger Countdown um 15:00 Uhr und endet um 15:10 Uhr bei Null. Ich kann oragedie Skripte aktivieren, benötige aber eine Möglichkeit, die Zähler und Informationen anzuzeigen.

Gibt es eine Möglichkeit, solche Countdown-Timer auf dem Bildschirm anzuzeigen?

Dorf
quelle
2
Ein conky Widget mit immer an der Spitze könnte den Trick tun
Muru
1
Alle X11-Programme können von Bash aus gestartet und gesteuert werden. Und verwenden Sie keine while-Schleife, um beschäftigt zu warten, Sie können verwenden sleep.
Strg-Alt-Delor
Haben Sie bereits in Betracht gezogen, dass ein (wöchentlicher (Mo - Fr) oder täglicher) Cron-Job geeignet sein könnte? Ich bin sicher, es könnte das oben erwähnte Conky-Widget aktivieren und anfangen, herunterzuzählen.
Nepumuk
Ich bin nicht vertraut damit, wie das funktioniert.
Dorf
@Village: Wie in den Kommentaren hier besprochen , meinst du unix.stackexchange.com/questions/535666/… wenn du darüber sprichst full screen, meinst du eigentlich maximized, oder?
Arkadiusz Drabczyk

Antworten:

2

Mit dem xfce4-genmon-Plugin können Sie ein solches Panel-Widget selbst erstellen.

Installieren Sie das Plugin aus den Repositorys Ihrer Distribution. Erstellen Sie dann ein Skript, das die Countdown-Anzeige generiert:

#!/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"
)

Ändern Sie es nach Belieben, speichern Sie es an einem unauffälligen Ort und erteilen Sie ihm die Ausführungsberechtigung ( chmod +x). Fügen Sie dann Ihrem Panel ein Element "Allgemeiner Monitor" hinzu. Zeigen Sie mit dem Bedienfeldelement auf Ihr Skript und konfigurieren Sie ein geeignetes Aktualisierungsintervall (wenn Sie die Sekundenanzeige entfernt haben, sollten Sie es wahrscheinlich bei 30 Sekunden belassen, um Strom / Leistung zu sparen). Und da hast du es.

user3840170
quelle
xfce4-genmon-pluginFühren Sie also einfach das ausgewählte Skript aus und drucken Sie das, was im Terminal angezeigt worden wäre, aber stattdessen auf dem Bedienfeld?
Dorf
Das stimmt. Es sind auch einige Formatierungs-Markups verfügbar, die auf der von mir verlinkten Seite beschrieben werden.
user3840170
4

Python mit tkinterAusgängen der schnellste und einfachste Weg , um die GUI - Anwendungen und Widgets zu erstellen. Das Erstellen einer GUI mit tkinterist eine einfache Aufgabe.

Sie müssen nur den folgenden Befehl verwenden, um das zu installieren tkinter

apt-get install python-tk python3-tk

Verwenden Sie für Fedora-Benutzer den folgenden Befehl.

dnf install python-tkinter python3-tkinter

Dies ist ein einfaches Skript für den Countdown mit tkinter, immer auf dem neuesten Stand und transparent:

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()

Bild

Rasool Ziafaty
quelle
Ich benutze fluxboxund diese Lösung funktioniert bei mir nicht. In Counting secondsder linken oberen Ecke wird ein Fenster mit dem Titel angezeigt, das jedoch von Vollbildfenstern blockiert wird. Drücken Sie beispielsweise in Firefox oder Evince F11 und beachten Sie, dass das Fenster nicht sichtbar ist.
Arkadiusz Drabczyk
Ich bin xfce4drinnen gelaufen Xephyrund tkinterWindows wird auch von Vollbild-Apps blockiert. Ich denke, diese Antwort ist falsch und beantwortet die Frage von OP nicht.
Arkadiusz Drabczyk
Wenn Sie in Firefox f11 drücken, können Sie selbst xfce clock und andere xfce-Plugins keine anderen Dinge sehen. Alle anderen Antworten sind also auch falsch. Ich denke, im Vollbildmodus meint er / sie maximierte Fenster, weil sie / er sagte: "Dies könnte entweder auf einem Panel oben auf dem Bildschirm angezeigt werden." @Arkadiusz Drabczyk
Rasool Ziafaty
i think by full screen she/he means maximized windows- Ich denke auch, aber in diesem Fall sollte die Frage umformuliert werden.
Arkadiusz Drabczyk
Ja, es muss sichtbar sein, auch wenn ein Fenster im Vollbildmodus angezeigt wird. Es handelt sich also entweder um eine transparente Ebene oder um ein Bedienfeld. Einige Einstellungen müssen jedoch geändert werden, damit das Bedienfeld immer sichtbar ist und nicht von Vollbild-Apps abgedeckt wird, wenn eine Lösung verwendet wird Das Panel wird verwendet.
Dorf
2

Es gibt viele Möglichkeiten und Widgets, einen Timer oder Countdown zu haben. Wenn Sie jedoch xfce verwenden und etwas Grafisches auf dem Bedienfeld wünschen, sollten Sie das xfce4-Timer-Plugin ausprobieren .

Es erfordert jedoch xfce> = 4.6. Ich weiß nicht, welche Version von xfce Sie ausführen, aber dieses Plugin könnte sehr gut für Ihre Anforderungen funktionieren.

Mit dem xfce4-Timer-Plugin können Sie einen Countdown und einen Alarm mit Wiederholungsoptionen einstellen, wenn Sie ihn beispielsweise täglich einstellen möchten:

Geben Sie hier die Bildbeschreibung ein

Auf Wunsch wird auch eine Countdown-Leiste im Bedienfeld angezeigt:

Countdown läuft: Geben Sie hier die Bildbeschreibung ein

Countdown leer: Geben Sie hier die Bildbeschreibung ein

Sie können mehr über das Plugin im obigen Link lesen, aber hier sind die Absätze über und Verwendung für alle Fälle:

Über

Dies ist ein einfaches Plugin, mit dem der Benutzer einen Alarm zu einem bestimmten Zeitpunkt oder am Ende eines bestimmten Countdown-Zeitraums ausführen kann.

Verwendungszweck

Das Plugin ist recht einfach: Es zeigt einen Fortschrittsbalken an, der den Prozentsatz der verstrichenen Zeit anzeigt. Wenn Sie mit der linken Maustaste auf den Plugin-Bereich klicken, wird ein Menü mit verfügbaren Alarmen geöffnet. Nach Auswahl eines Timers kann der Benutzer den Timer starten oder stoppen, indem er im selben Menü den Eintrag „Timer starten / stoppen“ wählt. Neue Alarme werden über das Einstellungsfenster hinzugefügt. Jeder Alarm ist entweder ein Countdown oder wird zu einem bestimmten Zeitpunkt ausgeführt. Standardmäßig wird am Ende des Countdowns ein einfacher Dialog angezeigt. Der Benutzer kann einen externen Befehl auswählen, der als Alarm ausgeführt werden soll, und kann auch festlegen, dass dieser Befehl mit einem bestimmten Intervall zwischen den Wiederholungen eine bestimmte Anzahl von Malen wiederholt wird.

Löwe
quelle
Ermöglicht diese App das automatische Einstellen eines Countdown-Timers zu einem bestimmten Zeitpunkt? Gibt es eine Möglichkeit, das Erscheinungsbild von der Leiste in einen Zähl-Timer zu ändern, da die Leiste nicht leicht zu erkennen ist?
Dorf
Es scheint, dass der Alarm programmierbar ist, aber der Countdown lässt nur eine Dauer zu. Soweit ich weiß, gibt es keine Möglichkeit, die Leiste zu ändern. Können Sie beispielsweise Gnome-Widgets in XFCE verwenden?
Leo
@Village Wenn ich dieses Timer-Plugin so bearbeite, dass es zu einem bestimmten Zeitpunkt automatisch gestartet wird, ist es das Kopfgeld wert? Was ist deine Distribution und Version von xfce?
Intika
Die beiden Probleme mit der Timer-App sind, dass es sehr schwer zu erkennen ist, da der kleine Balken zu klein ist, sodass eine Countdown-Uhr besser ist und nicht automatisch gestartet wird.
Dorf
1

Sie können crontab und ein Bash-Skript verwenden yad.

Zum Beispiel für eine Bereinigung um 15:10 Uhr, wobei der Countdown um 15:00 Uhr beginnt und der Unterricht um 18:10 Uhr beginnt und der Countdown um 18:00 Uhr beginnt:

Erstellen Sie ein Skript für den Countdown:

#!/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

Bearbeiten Sie die Crontab des Benutzers, der Zugriff auf die Anzeige hat (ich denke, es sollte Ihr eigener Benutzer sein), und passen Sie die DISPLAYVariable an, wenn sich echo $DISPLAYin Ihrer Shell etwas anderes befindet als :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"
Saïmonn
quelle