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


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


Так что 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"
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.