Comment afficher les comptes à rebours à des moments précis de la journée?


8

Je suis enseignant. Il y a certaines routines dans ma leçon, annoncées avec des événements chronométrés dans Orage, envoyées aux notifications. Par exemple:

  • Nettoyer
  • Mettez des chaises

Mes élèves ont demandé que je mette une horloge à rebours à l'écran pour avertir du temps restant avant un événement. J'utilise XFce, donc cela pourrait être affiché sur un panneau en haut de l'écran, jamais couvert par des éléments en plein écran, ou comme un affichage tête haute transparent non cliquable qui est toujours présent au-dessus de chaque fenêtre.

Par exemple:

  • 3:10 jusqu'au nettoyage.
  • 6h10 jusqu'à la fin du cours.

Ce ne sont pas des comptes à rebours qui sont activés manuellement, mais qui se produisent à des heures précises chaque jour, par exemple, un compte à rebours de 10 minutes commence à 15h00 et se termine à zéro à 15h10. Je peux utiliser oragepour activer les scripts, mais j'ai besoin d'un moyen d'afficher les compteurs et les informations.

Existe-t-il un moyen d'afficher ces minuteries à rebours à l'écran?


2
Un widget conky avec toujours sur le dessus pourrait faire l'affaire
muru

1
Tous les programmes X11 peuvent être démarrés et contrôlés depuis bash. Et n'utilisez pas de boucle while pour faire une attente occupée, vous pouvez utiliser sleep.
ctrl-alt-delor

Avez-vous déjà envisagé un travail cron (hebdomadaire (du lundi au vendredi) ou quotidien) qui pourrait convenir? Je suis sûr que cela pourrait activer le widget conky susmentionné en commençant le compte à rebours.
Nepumuk

Je ne sais pas comment cela fonctionne.
Village du

@Village: Comme discuté dans les commentaires ici unix.stackexchange.com/questions/535666/… quand vous parlez de full screenvous voulez dire maximized, non?
Arkadiusz Drabczyk

Réponses:


2

Avec xfce4-genmon-plugin , vous pouvez créer vous-même un tel widget de panneau.

Installez le plugin à partir des référentiels de votre distribution. Créez ensuite un script qui génère l'affichage du compte à rebours:

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

Modifiez-le comme bon vous semble, enregistrez-le dans un endroit discret et accordez-lui la permission d'exécution ( chmod +x). Ajoutez ensuite un élément "Moniteur générique" à votre panneau. Pointez l'élément du panneau vers votre script et configurez un intervalle de rafraîchissement approprié (si vous avez supprimé l'affichage des secondes, vous devriez probablement le laisser à 30 secondes pour économiser de l'énergie / des performances). Et voila.


Exécute-t-il xfce4-genmon-pluginsimplement le script sélectionné, imprimant ce qui aurait été affiché dans le terminal, mais à la place sur le panneau?
Village

C'est vrai. Il existe également un balisage de mise en forme disponible, décrit sur la page que j'ai liée.
user3840170

4

Python avec des sortiestkinter le plus rapide et plus simple pour créer les applications de l' interface graphique et le widget. La création d'une interface graphique à l'aide tkinterest une tâche facile.

Il vous suffit d'utiliser la commande suivante pour installer le tkinter

apt-get install python-tk python3-tk

Pour les utilisateurs de Fedora, utilisez la commande suivante.

dnf install python-tkinter python3-tkinter

Ceci est un script simple pour le compte à rebours avec tkinter, toujours au-dessus et 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()

Image


J'utilise fluxboxet cette solution ne fonctionne pas pour moi. Une fenêtre intitulée Counting secondsapparaît dans le coin supérieur gauche, mais elle est bloquée par des fenêtres en plein écran. Par exemple, appuyez sur F11 dans Firefox ou Evince et notez que la fenêtre n'est pas visible.
Arkadiusz Drabczyk

J'ai couru à l' xfce4intérieur Xephyret tkinterWindows est également bloqué par les applications en plein écran. Je pense donc que cette réponse est fausse et ne répond pas à la question d'OP.
Arkadiusz Drabczyk

Si vous appuyez sur f11 dans firefox, vous ne pouvez pas voir d'autres choses, même l'horloge xfce et d'autres plugins xfce. donc toutes les autres réponses sont fausses aussi. je pense qu'en plein écran, il / elle veut dire des fenêtres maximisées parce qu'il / elle a dit "cela pourrait être affiché sur un panneau en haut de l'écran", @Arkadiusz Drabczyk
Rasool Ziafaty

i think by full screen she/he means maximized windows- Je le pense aussi, mais dans ce cas, la question devrait être reformulée.
Arkadiusz Drabczyk

Oui, il doit être visible même lorsqu'une fenêtre est en plein écran, il s'agit donc d'un calque transparent ou d'un panneau, mais certains paramètres doivent être modifiés pour que le panneau soit toujours visible et non couvert par les applications en plein écran si une solution utilisant le panneau est utilisé.
Village du

2

Il existe de nombreuses façons et widgets d'avoir un minuteur ou un compte à rebours, mais étant donné que vous utilisez xfce et que vous voulez quelque chose de graphique sur le panneau, vous voudrez peut-être essayer xfce4-timer-plugin .

Cela nécessite cependant xfce> = 4,6. Je ne sais pas quelle version de xfce vous utilisez, mais ce plugin pourrait très bien fonctionner pour vos besoins.

Le plug-in xfce4-timer vous permet de définir un compte à rebours et une alarme avec des options de répétition si vous souhaitez le définir quotidiennement, par exemple:

entrez la description de l'image ici

Il affiche également une barre de compte à rebours dans le panneau si vous le souhaitez:

Compte à rebours en cours: entrez la description de l'image ici

Compte à rebours vide: entrez la description de l'image ici

Vous pouvez en savoir plus sur le plugin dans le lien ci-dessus, mais, voici les paragraphes à propos et d'utilisation au cas où:

À propos de

Il s'agit d'un plugin simple qui permet à l'utilisateur d'exécuter une alarme à une heure spécifiée ou à la fin d'une période de compte à rebours spécifiée.

Usage

Le plugin est assez simple - il affiche une barre de progression indiquant le pourcentage du temps écoulé. Un clic gauche sur la zone du plugin ouvre un menu d'alarmes disponibles. Après en avoir sélectionné un, l'utilisateur peut démarrer ou arrêter la minuterie en sélectionnant l'entrée «démarrer / arrêter la minuterie» dans le même menu. De nouvelles alarmes sont ajoutées via la fenêtre des préférences. Chaque alarme est un compte à rebours ou est exécutée à une heure spécifiée. Par défaut, une simple boîte de dialogue apparaît à la fin du compte à rebours. L'utilisateur peut choisir une commande externe à exécuter comme alarme et peut également choisir de la répéter un nombre spécifié de fois avec un intervalle donné entre les répétitions.


Cette application permet-elle de définir un compte à rebours pour qu'il démarre automatiquement à une heure donnée? Existe-t-il un moyen de changer l'apparence de la barre en une minuterie de comptage car la barre n'est pas très facile à voir?
Village

Il semble que l'alarme soit programmable, mais le compte à rebours ne permet qu'une durée. Pour autant que je sache, il n'y a pas d'option pour changer la barre. Pouvez-vous utiliser des widgets Gnome dans XFCE par exemple?.
Leo

@Village si je modifie ce plugin de minuterie pour qu'il gère le démarrage automatique à un moment donné, cela vaudrait-il la peine?, Quelle est votre distribution et votre version de xfce?
intika

Les deux problèmes avec l'application de minuterie sont qu'elle est très difficile à voir car la petite barre est trop petite, donc un compte à rebours est meilleur et il ne démarre pas automatiquement.
Village du

1

Vous pouvez utiliser crontab et un script bash en utilisant yad.

Par exemple, pour un nettoyage à 15h10, avec un compte à rebours commençant à 15h00 et une fin de classe à 18h10 avec un compte à rebours commençant à 18h00:

Créez un script pour le compte à rebours:

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

Modifiez la crontab de l'utilisateur qui a accès à l'affichage (je suppose que ce devrait être votre propre utilisateur) et adaptez la DISPLAYvariable si echo $DISPLAYdans votre shell est différent de :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"
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.