Как отображать таймеры обратного отсчета в определенное время дня?

8

Я работаю учителем. В моем уроке есть определенные подпрограммы, объявленные с запланированными событиями в Orage, отправленные в уведомления. Например:

  • Очистить
  • Поставить стулья

Мои ученики попросили меня поставить на экран часы обратного отсчета, чтобы предупредить, сколько времени осталось до события. Я использую XFce, так что это может быть либо отображено на панели в верхней части экрана, никогда не покрыто полноэкранными элементами, либо в виде прозрачного, не щелкающего по экрану дисплея, который всегда присутствует над каждым окном.

Например:

  • 3:10 до уборки.
  • 6:10 до конца класса.

Это не обратные отсчеты, которые активируются вручную, а происходят в определенное время каждый день, например, 10-минутный отсчет начинается в 15:00 и заканчивается в ноль в 15:10. Я могу использовать orageдля активации сценариев, но нужен какой-то способ для отображения счетчиков и информации.

Есть ли способ вывести на экран такие таймеры обратного отсчета?

Деревня
источник
2
Коварный виджет с всегда на вершине мог бы добиться
цели
1
Все программы X11 могут запускаться и управляться из bash. И не используйте цикл while для ожидания ожидания, вы можете использовать sleep.
Ctrl-Alt-Delor
Вы уже подумали, что (еженедельная (понедельник-пятница) или ежедневная) работа cron может быть подходящей? Я уверен, что он может активировать вышеупомянутый conky виджет, начинающий обратный отсчет.
Непумук
Я не знаком с тем, как это работает.
Деревня
@Village: Как обсуждалось в комментариях здесь, unix.stackexchange.com/questions/535666/… когда вы говорите о них, full screenвы на самом деле имеете в виду maximized, верно?
Аркадиуш Драбчик,

Ответы:

2

С xfce4-genmon-plugin вы можете создать такой виджет панели самостоятельно.

Установите плагин из репозитория вашего дистрибутива. Затем создайте скрипт, который генерирует отображение обратного отсчета:

#!/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 секундам для экономии энергии / производительности). И там у вас есть это.

user3840170
источник
Так что xfce4-genmon-pluginпросто запустить любой выбранный скрипт, печатая то, что было бы отображено в терминале, а не на панели?
Деревня
Вот так. Существует также некоторая доступная разметка форматирования, описанная на странице, которую я связал
user3840170
4

Python с tkinterвыходами самый быстрый и простой способ создания приложений с графическим интерфейсом и виджет. Создание графического интерфейса пользователя tkinter- простая задача.

Вам просто нужно использовать следующую команду для установки tkinter

apt-get install python-tk python3-tk

Для пользователей Fedora используйте следующую команду.

dnf install python-tkinter python3-tkinter

Это простой скрипт для обратного отсчета tkinter, всегда ontop и прозрачный:

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отображается в левом верхнем углу, но оно заблокировано полноэкранными окнами. Например, нажмите F11 в Firefox или Evince и обратите внимание, что окно не отображается.
Аркадиуш Драбчик
Я бегал xfce4изнутри, Xephyrи tkinterокна были заблокированы полноэкранными приложениями. Поэтому я думаю, что этот ответ неправильный и не отвечает на вопрос ОП.
Аркадиуш Драбчик,
Если вы нажмете f11 в Firefox, вы не увидите ничего другого, даже часы Xfce и другие плагины XFCE. так что все остальные ответы тоже неверны. я думаю, что под полным экраном она / он подразумевает развернутые окна, потому что она / он сказал: «это может быть отображено на панели в верхней части экрана» @Arkadiusz Drabczyk
Rasool Ziafaty
i think by full screen she/he means maximized windows- Я тоже так думаю, но в этом случае вопрос следует перефразировать.
Аркадиуш Драбчик
Да, он должен быть видимым, даже когда окно полноэкранное, поэтому это либо прозрачный слой, либо панель, но некоторые параметры необходимо изменить, чтобы панель всегда была видимой и не закрывалась полноэкранными приложениями, если решение, использующее панель используется.
Деревня
2

Есть много способов и виджетов иметь таймер или обратный отсчет, но, учитывая, что вы используете xfce и хотите что-то графическое на панели, вы можете попробовать xfce4-timer-plugin .

Это требует xfce> = 4.6, хотя. Я не знаю, какую версию xfce вы используете, но этот плагин вполне может подойти для ваших нужд.

Плагин xfce4-timer-plugin позволяет установить обратный отсчет и будильник с параметрами повтора, если вы хотите установить его ежедневно, например:

введите описание изображения здесь

Он также отображает панель обратного отсчета на панели, если вы хотите:

Обратный отсчет работает: введите описание изображения здесь

Обратный отсчет пуст: введите описание изображения здесь

Вы можете прочитать больше о плагине по ссылке выше, но, на всякий случай, здесь есть параграфы о и использовании:

Около

Это простой плагин, который позволяет пользователю запустить тревогу в указанное время или в конце указанного периода обратного отсчета.

Применение

Плагин довольно прост - он отображает индикатор выполнения, показывающий процент прошедшего времени. Щелчок левой кнопкой мыши по области плагина открывает меню доступных сигналов тревоги. Выбрав один, пользователь может запустить или остановить таймер, выбрав пункт «запуск / останов таймера» в том же меню. Новые тревоги добавляются через окно настроек. Каждый сигнал тревоги является либо обратным отсчетом, либо запускается в указанное время. По умолчанию простой диалог появляется в конце обратного отсчета. Пользователь может выбрать внешнюю команду для запуска в качестве аварийного сигнала, а также может повторить это заданное количество раз с заданным интервалом между повторениями.

Лео
источник
Позволяет ли это приложение установить таймер обратного отсчета для автоматического запуска в указанное время? Есть ли способ изменить внешний вид с бара на счетчик времени, так как бар не очень легко увидеть?
Деревня
Кажется, сигнал тревоги программируется, но обратный отсчет позволяет только в течение продолжительного времени. Насколько я знаю, нет возможности сменить планку. Можете ли вы использовать виджеты Gnome в XFCE для ex.?.
Лев
@ Village, если я отредактирую этот плагин таймера, чтобы он обрабатывал автоматический запуск в определенное время, стоило ли это вознаграждение? Какой у вас дистрибутив и версия xfce?
интика
Две проблемы с приложением таймера - его очень трудно увидеть, так как маленькая полоска слишком мала, поэтому часы с обратным отсчетом лучше, и они не запускаются автоматически.
Деревня
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"
Saïmonn
источник