Python обратный отсчет до серии раз в день - PullRequest
0 голосов
/ 20 февраля 2020

Моя цель - создать обратный отсчет, в котором будут отображаться минуты и секунды, оставшиеся до указанного c времени суток, а затем, когда это будет достигнуто, обратный отсчет до следующего.

Что у меня есть до сих пор будет обратный отсчет до заданной c даты и времени с использованием datetime.datetime, а затем остановка.

В настоящее время у меня есть две проблемы: как считать, используя время, а не datetime, так что он будет одинаковым каждый день (т.е. обратный отсчет до полудня каждый день, а не обратный отсчет до полудня на указанную c дату). Моя вторая проблема заключается в том, как перейти к следующему разу для подсчета (я полагаю, что это просто перенос нового времени, когда seconds_left = 0, но я не уверен).

Вот где я на данный момент:

#!/usr/bin/python

from tkinter import *
from tkinter import ttk
from tkinter import font
import time
import datetime

global endTime 

def quit(*args):
    root.destroy()

def show_time():
    # Get the time remaining until the event
    remainder = endTime - datetime.datetime.now()
    # remove the microseconds part
    remainder = remainder - datetime.timedelta(microseconds=remainder.microseconds)
    # Show the time left
    txt.set(remainder)
    # Trigger the countdown after 1000ms
    root.after(1000, show_time)

# Use tkinter lib for showing the clock
root = Tk()
root.attributes("-fullscreen", True)
root.configure(background='black')
root.bind("x", quit)
root.after(1000, show_time)

# Set the end date and time for the countdown
endTime = datetime.datetime(2017, 9, 19, 9, 0, 0)

fnt = font.Font(family='Helvetica', size=60, weight='bold')
txt = StringVar()
lbl = ttk.Label(root, textvariable=txt, font=fnt, foreground="green", background="black")
lbl.place(relx=0.5, rely=0.5, anchor=CENTER)

root.mainloop()

1 Ответ

1 голос
/ 21 февраля 2020

datetime работает просто отлично. Вам нужен условный оператор в вашей функции show_time для обновления вашего endTime.

примера использования datetime с now() и year, month, day для построения следующий endTime.

import tkinter as tk
from tkinter import ttk
from tkinter import font
import datetime as dt


def quit(*args):
    root.destroy()


def show_time():
    global endTime
    remainder = endTime - dt.datetime.now()
    remainder = remainder - dt.timedelta(microseconds=remainder.microseconds)

    if remainder.total_seconds() < 0:
        y = dt.datetime.now().year
        m = dt.datetime.now().month
        d = dt.datetime.now().day
        endTime = dt.datetime(y, m, d, 9, 0, 0) + dt.timedelta(days=1)

    txt.set(remainder)
    root.after(1000, show_time)


root = tk.Tk()
root.attributes("-fullscreen", True)
root.configure(background='black')
root.bind("x", quit)
root.after(1000, show_time)
endTime = dt.datetime(2017, 9, 19, 9, 0, 0)
fnt = font.Font(family='Helvetica', size=60, weight='bold')
txt = tk.StringVar()
lbl = ttk.Label(root, textvariable=txt, font=fnt, foreground="green", background="black")
lbl.place(relx=0.5, rely=0.5, anchor='center')
root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...