Como exibir temporizadores de contagem regressiva em horários específicos do dia?

8

Eu trabalho como professora. Existem certas rotinas na minha lição, anunciadas com eventos programados no Orage, enviadas para notificações. Por exemplo:

  • Limpar
  • Coloque cadeiras

Meus alunos solicitaram que eu colocasse um relógio de contagem regressiva na tela para avisar quanto tempo resta até um evento. Eu uso o XFce, para que ele possa ser exibido em um painel na parte superior da tela, nunca coberto por itens de tela cheia ou como um display heads-up transparente e não clicável, sempre presente acima de todas as janelas.

Por exemplo:

  • 3:10 até a limpeza.
  • 6:10 até o final da aula.

Essas não são as contagens regressivas ativadas manualmente, mas acontecem em horários específicos todos os dias, por exemplo, uma contagem regressiva de 10 minutos começa às 15:00 e termina em zero às 15:10. Posso usar oragepara ativar os scripts, mas preciso de alguma maneira de exibir os contadores e informações.

Existe alguma maneira de exibir esses cronômetros de contagem regressiva na tela?

Vila
fonte
2
Um widget conky com always-on-top pode fazer o truque
Muru
11
Todos os programas X11 podem ser iniciados e controlados a partir do bash. E não use um loop while para fazer a espera ocupada, você pode usar sleep.
Ctrl-alt-delor 15/08/19
Você já considerou um trabalho cron (semanal (de segunda a sexta) ou diário) adequado? Tenho certeza de que ele poderia ativar o widget conky acima mencionado, começando a contagem regressiva.
Nepumuk 23/09/19
Não estou familiarizado com como isso funciona.
Vila
@ Village: Como discutido nos comentários aqui, unix.stackexchange.com/questions/535666/… quando você está falando sobre o que full screenvocê quer dizer maximized, certo?
Arkadiusz Drabczyk 28/09/19

Respostas:

2

Com o xfce4-genmon-plugin , você mesmo pode criar um widget de painel.

Instale o plugin a partir dos repositórios da sua distribuição. Em seguida, crie um script que gere a exibição da contagem regressiva:

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

Modifique-o como achar melhor, salve-o em algum lugar discreto e conceda permissão de execução ( chmod +x). Em seguida, adicione um item "Monitor genérico" ao seu painel. Aponte o item do painel para o seu script e configure um intervalo de atualização adequado (se você removeu a exibição dos segundos, provavelmente deve deixá-lo em 30 segundos para economizar energia / desempenho). E aí está.

user3840170
fonte
Então, xfce4-genmon-pluginsimplesmente executa qualquer script selecionado, imprimindo o que seria exibido no terminal, mas no painel?
Vila
Está certo. Há também algumas marcações de formatação disponíveis, descritas na página que vinculei.
user3840170
4

Python com tkintersaídas a maneira mais rápida e fácil para criar as aplicações GUI e widget. Criar uma GUI usando tkinteré uma tarefa fácil.

Você só precisa usar o seguinte comando para instalar o tkinter

apt-get install python-tk python3-tk

Para usuários do Fedora, use o seguinte comando.

dnf install python-tkinter python3-tkinter

Este é um script simples para contagem regressiva tkinter, sempre ontop e 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()

Imagem

Rasool Ziafaty
fonte
Eu uso fluxboxe esta solução não funciona para mim. Uma janela intitulada Counting secondsaparece no canto superior esquerdo, mas é bloqueada pelas janelas de tela cheia. Por exemplo, pressione F11 no Firefox ou Evince e observe que a janela não está visível.
Arkadiusz Drabczyk 28/09/19
Corri para xfce4dentro Xephyre o tkinterWindows também é bloqueado por aplicativos em tela cheia. Então, acho que essa resposta está errada e não responde à pergunta da OP.
Arkadiusz Drabczyk 28/09/19
Se você pressionar f11 no firefox, não poderá ver outras coisas, nem o xfce clock e outros plugins do xfce. então todas as outras respostas também estão erradas. Eu acho que em tela cheia ela / ele significa janelas maximizadas porque disse que 'isso pode ser exibido em um painel na parte superior da tela', @Arkadiusz Drabczyk
Rasool Ziafaty
i think by full screen she/he means maximized windows- Também penso nisso, mas nesse caso a questão deve ser reformulada.
Arkadiusz Drabczyk 28/09/19
Sim, ele precisa estar visível mesmo quando uma janela é tela cheia, por isso é uma camada transparente ou em um painel, mas algumas configurações devem ser alteradas para que o painel fique sempre visível e não seja coberto por aplicativos em tela cheia, se uma solução usando o painel é usado.
Vila
2

Existem várias maneiras e widgets para ter um timer ou contagem regressiva, mas considerando que você está usando o xfce e deseja algo gráfico no painel, tente o xfce4-timer-plugin .

Requer xfce> = 4.6. Não sei qual versão do xfce você está executando, mas esse plug-in pode funcionar muito bem para suas necessidades.

O xfce4-timer-plugin permite que você defina uma contagem regressiva e um alarme com opções de repetição, se desejar configurá-lo diariamente, por exemplo:

insira a descrição da imagem aqui

Também exibe uma barra de contagem regressiva no painel, se você desejar:

Contagem regressiva em execução: insira a descrição da imagem aqui

Contagem regressiva vazia: insira a descrição da imagem aqui

Você pode ler mais sobre o plugin no link acima, mas aqui estão os parágrafos sobre e uso, apenas no caso de:

Sobre

Este é um plugin simples que permite ao usuário executar um alarme em um horário especificado ou no final de um período especificado de contagem regressiva.

Uso

O plugin é bastante simples - exibe uma barra de progresso mostrando a porcentagem do tempo decorrido. Clicar com o botão esquerdo na área do plugin abre um menu de alarmes disponíveis. Após selecionar um, o usuário pode iniciar ou parar o cronômetro, selecionando a entrada “iniciar / parar o cronômetro” no mesmo menu. Novos alarmes são adicionados através da janela de preferências. Cada alarme é uma contagem regressiva ou é executado em um horário especificado. Por padrão, uma caixa de diálogo simples aparece no final da contagem regressiva. O usuário pode escolher um comando externo para ser executado como alarme e também pode repeti-lo um número especificado de vezes com um determinado intervalo entre repetições.

Leo
fonte
Este aplicativo permite que a configuração de um temporizador de contagem regressiva comece automaticamente em um determinado momento? Existe uma maneira de alterar a aparência da barra para um temporizador de contagem, pois a barra não é muito fácil de ver?
Vila
Parece que o alarme é programável, mas a contagem regressiva apenas permite uma duração. Tanto quanto eu sei, não há opção para mudar a barra. Você pode usar os widgets do Gnome no XFCE, por exemplo?
Leo
@ Village se eu editar este plugin do timer para fazê-lo lidar com a inicialização automática em um determinado momento, valeria a pena ?, qual é a sua distribuição e versão do xfce?
Intika 28/09/19
Os dois problemas com o aplicativo de timer são muito difíceis de ver, pois a pequena barra é muito pequena, então um relógio de contagem regressiva é melhor e não é iniciado automaticamente.
Vila
1

Você pode usar crontab e um script bash usando yad.

Por exemplo, para uma limpeza às 15:10, com a contagem regressiva iniciando às 15:00 e final da aula às 18:10, com a contagem regressiva iniciando às 18:00:

Crie um script para contagem regressiva:

#!/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 o crontab do usuário que tem acesso à tela (acho que deve ser seu próprio usuário) e adapte a DISPLAYvariável se o echo $DISPLAYseu shell for 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
fonte