2017-01-12 4 views
1

Ниже приведено код QLabel и начинается обратный отсчет. Каждую секунду он печатает текущее время и сколько секунд осталось.Как создать обратный отсчет с Qt

enter image description here

Помимо печати текущего времени (Time сейчас) Я хотел бы напечатать какое время он будет, когда отсчет дошел до конца. Таким образом, полученное сообщение будет выглядеть так:

"Time now: 20:00:01. Countdown ends at: 20:00:16" 

Как его достичь?

import datetime 
from PyQt4 import QtGui, QtCore 
app = QtGui.QApplication([]) 

label = QtGui.QLabel() 
label.resize(360, 40) 
label.show() 

count = 15 
def countdown(): 
    global count 
    if count < 1: 
     count = 15 
    label.setText('Time now: %s. Seconds left: %s'%(datetime.datetime.now().strftime("%H:%M:%S"), count)) 
    count = count - 1 

timer = QtCore.QTimer() 
timer.timeout.connect(countdown) 
timer.start(1000) 

app.exec_() 

Рабочий раствор:

(благодаря eyllanesc):

enter image description here

import datetime 
from PyQt4 import QtGui, QtCore 
app = QtGui.QApplication([]) 

label = QtGui.QLabel() 
label.resize(360, 40) 
label.show() 

count = 15 
def countdown(): 
    global count 
    if count < 1: 
     count = 15 
    now = datetime.datetime.now() 
    label.setText('Time now: %s. End time: %s. Seconds left: %s'%(now.strftime("%H:%M:%S"), (now + datetime.timedelta(seconds=count)).strftime("%H:%M:%S"), count)) 
    count = count - 1 

interval = 1200 
timer = QtCore.QTimer() 
timer.timeout.connect(countdown) 
timer.start(1000) 

app.exec_() 

ответ

3

Вы должны datetime.timedelta() добавлены в "оставшееся время":

... 
now = datetime.datetime.now() 
end = now + datetime.timedelta(seconds=count) 
label.setText('Time now: %s. Countdown ends at: %s' % (now.strftime("%H:%M:%S"), end.strftime("%H:%M:%S"))) 
... 

enter image description here

+0

Отличная работа и отображение только отличий;) – Schollii

+0

Приятно видеть ответы, которые вписываются в мое окно браузера. Вся эта прокрутка заставляет меня устать :) – ekhumoro