PyQt5 QTimer отсчитывает до определенных секунд

Я создаю программу на питоне и использую pyqt. В настоящее время я работаю с QTimer, и я хочу печатать «таймер работает» каждые секунды и прекращать печать через 5 секунд. Вот мой код:

timers = []
def thread_func():
    print("Thread works")
    timer = QtCore.QTimer()
    timer.timeout.connect(timer_func)
    timer.start(1000)
    print(timer.remainingTime())
    print(timer.isActive())
    timers.append(timer)

def timer_func():
    print("Timer works")

person Jaypee    schedule 09.10.2017    source источник
comment
Класс QTimer не поддерживает остановку после фиксированного количества тайм-аутов. Вам придется вести подсчет и явно останавливать его.   -  person ekhumoro    schedule 10.10.2017
comment
Не могли бы вы сделать демо для меня? Я только начинающий.   -  person Jaypee    schedule 10.10.2017


Ответы (1)


Ниже приведена простая демонстрация, показывающая, как создать таймер, который останавливается после фиксированного количества тайм-аутов.

from PyQt5 import QtCore

def start_timer(slot, count=1, interval=1000):
    counter = 0
    def handler():
        nonlocal counter
        counter += 1
        slot(counter)
        if counter >= count:
            timer.stop()
            timer.deleteLater()
    timer = QtCore.QTimer()
    timer.timeout.connect(handler)
    timer.start(interval)

def timer_func(count):
    print('Timer:', count)
    if count >= 5:
        QtCore.QCoreApplication.quit()

app = QtCore.QCoreApplication([])
start_timer(timer_func, 5)
app.exec_()
person ekhumoro    schedule 10.10.2017
comment
Вау! Это то, что я искал. Вот спасибо дружище! - person Jaypee; 10.10.2017