¿Cómo mostrar temporizadores de cuenta regresiva en momentos específicos del día?

8

Yo trabajo de profesor. Hay ciertas rutinas en mi lección, anunciadas con eventos cronometrados en Orage, enviadas a notificaciones. P.ej:

  • Limpiar
  • Poner sillas

Mis alumnos me solicitaron que pusiera un reloj de cuenta regresiva en la pantalla para advertir cuánto tiempo queda hasta un evento. Utilizo XFce, por lo que esto podría mostrarse en un panel en la parte superior de la pantalla, nunca cubierto por elementos de pantalla completa, o como una pantalla transparente transparente que no se puede hacer clic y que siempre está presente encima de cada ventana.

P.ej:

  • 3:10 hasta la limpieza.
  • 6:10 hasta el final de la clase.

Estas no son cuentas regresivas que se activan manualmente, pero suceden en momentos específicos todos los días, por ejemplo, una cuenta regresiva de 10 minutos comienza a las 3:00 p.m. y termina a cero a las 3:10 p.m. Puedo usar oragepara activar los scripts, pero necesito alguna forma de mostrar los contadores y la información.

¿Hay alguna manera de mostrar tales temporizadores de cuenta regresiva en la pantalla?

Pueblo
fuente
2
Un widget conky con siempre en la cima podría ser el truco
muru
1
Todos los programas X11 pueden iniciarse y controlarse desde bash. Y no use un ciclo while para hacer una espera ocupada, puede usarlo sleep.
ctrl-alt-delor
¿Ya consideró que un trabajo cron (semanal (de lunes a viernes) o diario) podría ser adecuado? Estoy seguro de que podría activar el widget conky mencionado anteriormente comenzando a contar hacia atrás.
Nepumuk
No estoy familiarizado con cómo funciona eso.
Village
@Village: Como se discutió en los comentarios aquí, unix.stackexchange.com/questions/535666/… cuando estás hablando de lo full screenque realmente quieres decir maximized, ¿verdad?
Arkadiusz Drabczyk

Respuestas:

2

Con xfce4-genmon-plugin , puede crear dicho widget de panel usted mismo.

Instala el complemento desde los repositorios de tu distribución. Luego cree un script que genere la pantalla de cuenta regresiva:

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

Modifíquelo como mejor le parezca, guárdelo en un lugar discreto y concédale permiso de ejecución ( chmod +x). Luego agregue un elemento "Monitor genérico" a su panel. Apunte el elemento del panel a su script y configure un intervalo de actualización adecuado (si eliminó la visualización de segundos, probablemente debería dejarlo en 30 segundos para ahorrar energía / rendimiento). Y ahí lo tienes.

usuario3840170
fuente
Entonces, ¿ xfce4-genmon-pluginsimplemente ejecuta cualquier script seleccionado, imprimiendo lo que se habría mostrado en el terminal, pero en su lugar en el panel?
Pueblo
Así es. También hay algunas marcas de formato disponibles, descritas en la página que he vinculado.
user3840170
4

Python con tkintersalidas de la manera más rápida y sencilla de crear las aplicaciones GUI y widgets. Crear una GUI usando tkinteres una tarea fácil.

Solo necesita usar el siguiente comando para instalar el tkinter

apt-get install python-tk python3-tk

Para los usuarios de Fedora, use el siguiente comando.

dnf install python-tkinter python3-tkinter

Este es un script simple para cuenta regresiva con tkinter, siempre activado y transparente:

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

Imagen

Rasool Ziafaty
fuente
Yo uso fluxboxy esta solución no funciona para mí. Aparece una ventana titulada Counting secondsen la esquina superior izquierda pero está bloqueada por ventanas de pantalla completa. Por ejemplo, presione F11 en Firefox o Evince y observe que la ventana no está visible.
Arkadiusz Drabczyk
He corrido xfce4dentro Xephyry tkinterWindows también está bloqueado por aplicaciones de pantalla completa. Así que creo que esta respuesta es incorrecta y no responde la pregunta de OP.
Arkadiusz Drabczyk
Si presiona f11 en firefox, no puede ver otras cosas, incluso xfce clock y otros complementos de xfce. entonces todas las otras respuestas también están equivocadas. Creo que por pantalla completa quiere decir ventanas maximizadas porque dijo 'esto podría mostrarse en un panel en la parte superior de la pantalla', @Arkadiusz Drabczyk
Rasool Ziafaty
i think by full screen she/he means maximized windows- Creo que también, pero en ese caso la pregunta debería reformularse.
Arkadiusz Drabczyk
Sí, debe ser visible incluso cuando una ventana es de pantalla completa, por lo que es una capa transparente o en un panel, pero algunas configuraciones deben cambiarse para que el panel siempre esté visible y no esté cubierto por aplicaciones de pantalla completa si una solución usa Se utiliza el panel.
Village
2

Hay muchas formas y widgets para tener un temporizador o una cuenta regresiva, pero teniendo en cuenta que está utilizando xfce y desea algo gráfico en el panel, es posible que desee probar xfce4-timer-plugin .

Sin embargo, requiere xfce> = 4.6. No sé qué versión de xfce está ejecutando, pero este complemento podría funcionar para sus necesidades.

El xfce4-timer-plugin le permite configurar una cuenta regresiva y una alarma con opciones de repetición si desea configurarlo diariamente, por ejemplo:

ingrese la descripción de la imagen aquí

También muestra una barra de cuenta regresiva en el panel si lo desea:

Cuenta atrás en ejecución: ingrese la descripción de la imagen aquí

Cuenta atrás vacía: ingrese la descripción de la imagen aquí

Puede leer más sobre el complemento en el enlace de arriba, pero aquí están los párrafos sobre y uso por si acaso:

Acerca de

Este es un complemento simple que le permite al usuario ejecutar una alarma a una hora específica o al final de un período de cuenta regresiva específico.

Uso

El complemento es bastante simple: muestra una barra de progreso que muestra el porcentaje del tiempo transcurrido. Al hacer clic izquierdo en el área del complemento, se abre un menú de alarmas disponibles. Después de seleccionar uno, el usuario puede iniciar o detener el temporizador seleccionando la entrada "iniciar / detener temporizador" en el mismo menú. Se agregan nuevas alarmas a través de la ventana de preferencias. Cada alarma es una cuenta regresiva o se ejecuta a una hora específica. Por defecto, aparece un cuadro de diálogo simple al final de la cuenta regresiva. El usuario puede elegir un comando externo para que se ejecute como alarma y también puede elegir que se repita un número específico de veces con un intervalo determinado entre repeticiones.

León
fuente
¿Esta aplicación permite configurar un temporizador de cuenta regresiva para comenzar automáticamente en un momento dado? ¿Hay alguna manera de cambiar la apariencia de la barra a un temporizador de conteo ya que la barra no es muy fácil de ver?
Village
Parece que la alarma es programable, pero la cuenta regresiva solo permite una duración. Hasta donde sé, no hay opción para cambiar la barra. ¿Se pueden usar widgets de Gnome en XFCE por ejemplo?
Leo
@Village si edito este plugin de temporizador para que maneje el inicio automático en un momento dado, ¿valdría la pena la recompensa? ¿Cuál es su distribución y versión de xfce?
intika
Los dos problemas con la aplicación del temporizador es que es muy difícil de ver ya que la pequeña barra es demasiado pequeña, por lo que un reloj de cuenta regresiva es mejor y no se inicia automáticamente.
Village
1

Podría usar crontab y un script bash usando yad.

Por ejemplo, para una limpieza a las 15:10, con la cuenta regresiva a partir de las 15:00 y al final de la clase a las 18:10 con la cuenta regresiva a partir de las 18:00:

Crea un script para la cuenta regresiva:

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

Edite el crontab del usuario que tiene acceso a la pantalla (supongo que debería ser su propio usuario) y adapte la DISPLAYvariable si echo $DISPLAYen su shell es diferente 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"
Saïmonn
fuente