Làm cách nào để hiển thị đồng hồ đếm ngược tại các thời điểm cụ thể trong ngày?


8

Tôi làm việc với vai trò như một giáo viên. Có những thói quen nhất định trong bài học của tôi, được thông báo với các sự kiện được định thời trong Orage, được gửi đến thông báo. Ví dụ:

  • Dọn dẹp
  • Đặt ghế lên

Học sinh của tôi yêu cầu tôi đặt đồng hồ đếm ngược trên màn hình để cảnh báo thời gian còn lại cho đến khi một sự kiện. Tôi sử dụng XFce, do đó, điều này có thể được hiển thị trên một bảng ở phía trên màn hình, không bao giờ được bao phủ bởi các mục toàn màn hình hoặc dưới dạng màn hình hiển thị trong suốt, không thể nhấp, luôn xuất hiện ở trên mỗi cửa sổ.

Ví dụ:

  • 3:10 cho đến khi dọn dẹp.
  • 6:10 cho đến khi kết thúc lớp học.

Đây không phải là đếm ngược được kích hoạt thủ công, nhưng xảy ra vào những thời điểm cụ thể mỗi ngày, ví dụ: đếm ngược 10 phút bắt đầu lúc 3:00 chiều và kết thúc vào 0 lúc 3:10 tối. Tôi có thể sử dụng orageđể kích hoạt các tập lệnh, nhưng cần một số cách để hiển thị các bộ đếm và thông tin.

Có cách nào để hiển thị đồng hồ đếm ngược như vậy trên màn hình không?


2
Một tiện ích conky luôn luôn ở trên đầu có thể thực hiện mẹo
muru

1
Tất cả các chương trình X11 có thể được bắt đầu và được kiểm soát từ bash. Và đừng sử dụng vòng lặp while để chờ đợi bận rộn, bạn có thể sử dụng sleep.
ctrl-alt-delor

Bạn đã xem xét một công việc cron (hàng tuần (Thứ Hai - Thứ Sáu) hoặc hàng ngày) có thể phù hợp chưa? Tôi chắc chắn rằng nó có thể kích hoạt tiện ích conky đã đề cập ở trên bắt đầu đếm ngược.
Nepumuk

Tôi không quen với cách nó hoạt động.
Làng

@Village: Như đã thảo luận trong các bình luận ở đây unix.stackexchange.com/questions/535666/ Đá khi bạn đang nói về full screenbạn thực sự có nghĩa maximized, phải không?
Arkadiusz Drabchot

Câu trả lời:


2

Với xfce4-genmon-plugin , bạn có thể tự tạo một widget bảng điều khiển như vậy.

Cài đặt plugin từ kho của distro của bạn. Sau đó tạo tập lệnh tạo màn hình đếm ngược:

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

Sửa đổi nó khi bạn thấy phù hợp, lưu nó ở một nơi không phô trương và cấp cho nó quyền thực thi ( chmod +x). Sau đó thêm một mục "Màn hình chung" vào bảng điều khiển của bạn. Trỏ mục bảng điều khiển vào tập lệnh của bạn và định cấu hình khoảng thời gian làm mới phù hợp (nếu bạn loại bỏ hiển thị giây, có lẽ bạn nên để nó ở mức 30 giây để tiết kiệm năng lượng / hiệu suất). Và bạn có nó rồi đấy!


Vì vậy, xfce4-genmon-pluginchỉ cần chạy bất kỳ tập lệnh nào được chọn, in những gì sẽ được hiển thị trong thiết bị đầu cuối, nhưng thay vào đó trên bảng điều khiển?
Làng

Đúng rồi. Ngoài ra còn có một số đánh dấu định dạng có sẵn, được mô tả trên trang tôi liên kết.
dùng3840170

4

Python với tkinterkết quả đầu ra là cách nhanh nhất và dễ dàng nhất để tạo ra các ứng dụng GUI và phụ tùng. Tạo GUI bằng cách sử dụng tkinterlà một nhiệm vụ dễ dàng.

Bạn chỉ cần sử dụng lệnh sau để cài đặt tkinter

apt-get install python-tk python3-tk

Đối với người dùng Fedora, sử dụng lệnh sau.

dnf install python-tkinter python3-tkinter

Đây là một tập lệnh đơn giản để đếm ngược với tkinter, luôn luôn hoàn hảo và minh bạch:

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

Hình ảnh


Tôi sử dụng fluxboxvà giải pháp này không hiệu quả với tôi. Một cửa sổ có tiêu đề Counting secondshiển thị ở góc trên bên trái nhưng nó bị chặn bởi các cửa sổ toàn màn hình. Ví dụ: nhấn F11 trong Firefox hoặc Evince và lưu ý rằng cửa sổ không hiển thị.
Arkadiusz Drabchot

Tôi đã chạy xfce4bên trong Xephyrvà các tkintercửa sổ cũng bị chặn bởi các ứng dụng toàn màn hình. Vì vậy, tôi nghĩ rằng câu trả lời này là sai và không trả lời câu hỏi của OP.
Arkadiusz Drabchot

Nếu bạn nhấn f11 trong firefox, bạn không thể thấy bất kỳ thứ gì khác ngay cả đồng hồ xfce và các plugin xfce khác. Vì vậy, tất cả các câu trả lời khác là sai quá. Tôi nghĩ rằng toàn màn hình cô ấy / anh ấy có nghĩa là cửa sổ tối đa hóa vì cô ấy / anh ấy nói 'cái này có thể được hiển thị trên một bảng ở trên cùng của màn hình,' @Arkadiusz Drabchot
Rasool Ziafaty

i think by full screen she/he means maximized windows- Tôi cũng nghĩ vậy nhưng trong trường hợp đó, câu hỏi nên được đọc lại.
Arkadiusz Drabchot

Có, nó cần phải được hiển thị ngay cả khi cửa sổ toàn màn hình, vì vậy nó là lớp trong suốt hoặc trên bảng điều khiển, nhưng một số cài đặt phải được thay đổi để bảng luôn hiển thị và không bị các ứng dụng toàn màn hình che phủ nếu sử dụng giải pháp bảng điều khiển được sử dụng.
Làng

2

Có nhiều cách và vật dụng để có bộ đếm thời gian hoặc đếm ngược, nhưng xem xét bạn đang sử dụng xfce và muốn một cái gì đó đồ họa trên bảng điều khiển, bạn có thể muốn thử xfce4-timer-plugin .

Nó không yêu cầu xfce> = 4.6 mặc dù. Tôi không biết bạn đang chạy phiên bản xfce nào, nhưng plugin này có thể hoạt động rất tốt cho nhu cầu của bạn.

Plugin xfce4-timer-plugin cho phép bạn đặt đếm ngược và báo thức với các tùy chọn lặp lại nếu bạn muốn đặt nó hàng ngày chẳng hạn ,:

nhập mô tả hình ảnh ở đây

Nó cũng hiển thị thanh đếm ngược trong bảng điều khiển nếu bạn muốn:

Đếm ngược đang chạy: nhập mô tả hình ảnh ở đây

Đếm ngược trống: nhập mô tả hình ảnh ở đây

Bạn có thể đọc thêm về plugin trong liên kết ở trên, nhưng, đây là đoạn giới thiệu và sử dụng chỉ trong trường hợp:

Trong khoảng

Đây là một plugin đơn giản cho phép người dùng chạy báo thức vào một thời điểm nhất định hoặc vào cuối thời gian đếm ngược được chỉ định.

Sử dụng

Plugin khá đơn giản - nó hiển thị một thanh tiến trình hiển thị phần trăm thời gian đã trôi qua. Nhấp chuột trái vào khu vực plugin sẽ mở ra một menu các báo động có sẵn. Sau khi chọn một, người dùng có thể bắt đầu hoặc dừng bộ hẹn giờ bằng cách chọn mục nhập bắt đầu / dừng bộ hẹn giờ trên đường cùng trong một menu. Báo động mới được thêm vào thông qua cửa sổ tùy chọn. Mỗi báo thức là đếm ngược hoặc được chạy tại một thời điểm nhất định. Theo mặc định, một hộp thoại đơn giản bật lên vào cuối đếm ngược. Người dùng có thể chọn một lệnh bên ngoài để chạy làm báo thức và cũng có thể chọn để lệnh này lặp lại một số lần được chỉ định với một khoảng thời gian nhất định giữa các lần lặp lại.


Ứng dụng này có cho phép thiết lập đồng hồ đếm ngược để bắt đầu tự động tại một thời điểm nhất định không? Có cách nào để thay đổi giao diện từ thanh sang đồng hồ đếm ngược vì thanh không dễ nhìn thấy không?
Làng

Có vẻ như báo thức có thể lập trình được, nhưng đếm ngược chỉ cho phép trong một khoảng thời gian. Theo tôi biết, không có tùy chọn để thay đổi thanh. Bạn có thể sử dụng các tiện ích Gnome trong XFCE cho ex.?.
Leo

@Village nếu tôi chỉnh sửa plugin hẹn giờ này để làm cho nó xử lý khởi động tự động tại một thời điểm nhất định, nó có đáng để nhận tiền thưởng không?, Bản phân phối và phiên bản xfce của bạn là gì?
intika

Hai vấn đề với ứng dụng hẹn giờ là rất khó thấy vì thanh nhỏ quá nhỏ, vì vậy đồng hồ đếm ngược sẽ tốt hơn và nó không khởi động tự động.
Làng

1

Bạn có thể sử dụng crontab và tập lệnh bash bằng cách sử dụng yad.

Ví dụ: để dọn dẹp lúc 15:10, với đếm ngược bắt đầu lúc 15:00 và kết thúc lớp học lúc 18h10 với đếm ngược bắt đầu lúc 18:00:

Tạo một kịch bản để đếm ngược:

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

Chỉnh sửa crontab của người dùng có quyền truy cập vào màn hình (Tôi đoán đó phải là người dùng của riêng bạn) và điều chỉnh DISPLAYbiến nếu echo $DISPLAYtrong vỏ của bạn khác với :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"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.