나는 선생님이다. 내 과정에는 Orage의 시간 제한 이벤트를 통해 발표되고 알림으로 전송되는 몇 가지 루틴이 있습니다. 예를 들어:
- 청소하다
- 의자를 세워라
학생들은 활동까지 남은 시간을 경고하기 위해 화면에 카운트다운 타이머를 표시해 달라고 요청했습니다. 저는 XFce를 사용하여 전체 화면 항목으로 덮이지 않는 화면 상단의 패널로 나타나거나 항상 모든 창 위에 나타나는 클릭할 수 없는 투명한 헤드업 디스플레이로 나타날 수 있습니다.
예를 들어:
- 3시 10분부터 청소될 때까지.
- 6시 10분부터 수업이 끝날 때까지.
이는 수동으로 활성화되는 카운트다운이 아니라 매일 특정 시간에 발생합니다. 예를 들어 10분 카운트다운은 오후 3시에 시작하여 오후 3시 10분에 0시에 끝납니다. 활성화 스크립트를 사용할 수 있지만 orage
카운터와 정보를 표시하는 방법이 필요합니다.
이와 같은 카운트다운 타이머를 화면에 표시할 수 있는 방법이 있나요?
답변1
출력 기능이 있는 Python tkinter
GUI 애플리케이션과 위젯을 만드는 가장 빠르고 쉬운 방법입니다. GUI를 만드는 것은 tkinter
간단한 작업입니다.
설치하려면 다음 명령을 사용해야합니다.tkinter
apt-get install python-tk python3-tk
Fedora 사용자의 경우 다음 명령을 사용하십시오.
dnf install python-tkinter python3-tkinter
tkinter
다음은 항상 상단에 투명하게 표시되는 간단한 카운트다운 스크립트입니다 .
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()
답변2
그리고xfce4-genmon-플러그인, 이러한 패널 위젯을 직접 만들 수 있습니다.
배포판 저장소에서 플러그인을 설치합니다. 그런 다음 카운트다운 표시를 생성하는 스크립트를 만듭니다.
#!/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초로 남겨 두어야 합니다). 이제 알 수 있습니다.
답변3
타이머나 카운트다운을 설정하는 방법과 위젯은 많지만 xfce를 사용하고 있고 패널에 그래픽을 표시하려는 경우 시도해 볼 수 있습니다.xfce4 타이머 플러그인.
그러나 xfce >= 4.6이 필요합니다. 귀하가 실행 중인 xfce 버전이 무엇인지는 모르지만 이 플러그인이 귀하의 요구에 완벽할 수 있습니다.
매일 설정하려는 경우 xfce4-timer-plugin을 사용하면 반복 옵션으로 카운트다운 및 알람을 설정할 수 있습니다. 예:
원하는 경우 패널에 카운트다운 막대도 표시됩니다.
위 링크에서 플러그인에 대한 자세한 내용을 읽을 수 있지만, 만일의 경우를 대비하여 플러그인에 대한 정보 및 사용법 단락은 다음과 같습니다.
~에 대한
이는 사용자가 지정된 시간이나 지정된 카운트다운이 끝날 때 경고를 실행할 수 있는 간단한 플러그인입니다.
용법
플러그인은 매우 간단합니다. 경과 시간의 백분율을 보여주는 진행률 표시줄을 표시합니다. 플러그인 영역을 마우스 왼쪽 버튼으로 클릭하면 사용 가능한 경고 메뉴가 열립니다. 항목을 선택한 후 사용자는 동일한 메뉴에서 "타이머 시작/중지" 항목을 선택하여 타이머를 시작하거나 중지할 수 있습니다. 새로운 알림은 기본 설정 창을 통해 추가됩니다. 각 알람은 카운트다운되거나 지정된 시간에 실행됩니다. 기본적으로 카운트다운이 끝나면 간단한 대화 상자가 나타납니다. 사용자는 경고로 실행할 외부 명령을 선택하거나 주어진 반복 간격으로 지정된 횟수만큼 반복하도록 선택할 수 있습니다.
답변4
crontab을 사용하고 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
쉘의 변수가 다음과 다른 경우 DISPLAY
디스플레이 에 액세스할 수 있는 사용자의 crontab을 편집하십시오(내 사용자여야 합니다).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"