Обратный отсчёт в PyQt5

Помогите сделать чтобы после нажатия на кнопку "Start" на окне появлялся обратный отсчёт большими цифрами 3, 2, 1 и потом высвечивалось окно с такой картинкой.


million.png

Who Wants to Be a Millionaire?


main.py:

from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QVBoxLayout, QHBoxLayout, QRadioButton, QMessageBox
import webbrowser

app = QApplication([])
main_win = QWidget()

main_win.setWindowTitle('Хто хоче стати мільйонером?')
main_win.resize(850, 770)
main_win.move(610, 110)
question = QLabel('<h1 style="color: rgb(250, 55, 55);">Правила гри')
app.setStyleSheet("QLabel{font-size: 20pt;}#rules { background-color: #ccffbd;}")

rules = QLabel('''Гра "Хто хоче стати мільйонером?" 
\
Ви повинні правильно відповісти на низку питань \
з кількома варіантами відповідей, щоб заробити 3.000.000 грн. \
Всього 15 питань, кожне питання коштує певної суми грошей, \
учасники не мають жодних тимчасових обмежень для надання \
відповіді. Учасники також отримують три види підказок, щоб допомогти собі, \
якщо вони застрягли на конкретному питанні.  
\
Більше ознайомитися з правилами можна, натиснувши на кнопку. 
\
Хай щастить!''')
rules.setObjectName('rules')
rules.setWordWrap(True) 


button_rules = QPushButton('Правила')
button_rules.clicked.connect(lambda: webbrowser.open('https://ru.wwbm.com/rules'))
button_rules.setFixedSize(300,50)

button_start = QPushButton('Start')
button_start.setFixedSize(300,50)
app.setStyleSheet("QLabel, QPushButton{font-size: 20pt;}#rules { background-color: #ccffbd;}")

line = QVBoxLayout()
lineH1 = QHBoxLayout()
lineH2 = QHBoxLayout()
lineH3 = QHBoxLayout()
lineH1.addWidget(question, alignment = Qt.AlignCenter)
lineH2.addWidget(rules, alignment = Qt.AlignCenter)
lineH3.addWidget(button_rules, alignment=Qt.AlignCenter)
lineH3.addWidget(button_start, alignment=Qt.AlignCenter)

main_win.setLayout(line)
line.addLayout(lineH1)
line.addLayout(lineH2)
line.addLayout(lineH3)
main_win.show()
app.exec()

Ответы (1 шт):

Автор решения: S. Nick

Класс QTimer предоставляет повторяющиеся и однократные таймеры.

Больше https://doc.qt.io/qt-5/qtimer.html

from PyQt5.QtCore import Qt, QTimer
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, \
    QLabel, QVBoxLayout, QHBoxLayout, QRadioButton, QMessageBox
from PyQt5.QtGui import QPixmap


class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        
        self.num = 3

        self.question = QLabel('<h1 style="color: #C81912;">Правила игры</h1>')

        self.rules = QLabel('''Игра Кто хочет стать миллионером? - \
это конкурс викторина, в котором участники \
должны правильно ответить на ряд вопросов \
с несколькими вариантами ответов, чтобы перейти на следующий уровень. \
Всего 15 вопросов, каждый вопрос стоит определенной суммы денег, \
участники не имеют никаких временных ограничений для предоставления \
ответа. Участники также получают три вида подсказок, чтобы помочь себе, \
если они застряли на конкретном вопросе.''')
        self.rules.setObjectName('rules')
        self.rules.setWordWrap(True)    

        self.button_start = QPushButton('Start', clicked=self._start)        
        
        layout = QVBoxLayout(self)
        layout.addWidget(self.question, alignment = Qt.AlignCenter, stretch=0)
        layout.addWidget(self.rules, stretch=1) 
        layout.addWidget(self.button_start)
        
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.update_timer)
        
    def update_timer(self):        
        self.question.setText(f'<h1 style="color: #C81912;">{self.num}</h1>')
        if self.num == 0:
            self.timer.stop()
            self.rules.setPixmap(QPixmap("million.png"))
            self.num = 3
            self.question.hide()
            self.button_start.hide()
            return            
        self.num -= 1        
  
    def _start(self):
        self.timer.start(1000)
        

if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    app.setStyleSheet("""
    QLabel { 
        font-size: 18pt;
    }
    #rules { 
        background-color: #ccffbd;
    }
    """)    
    
    w = MainWindow()          
    w.setWindowTitle('WindowTitle')    
    w.resize(570, 400)
    w.show()                           
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка