Обратный отсчёт в PyQt5
Помогите сделать чтобы после нажатия на кнопку "Start" на окне появлялся обратный отсчёт большими цифрами 3, 2, 1 и потом высвечивалось окно с такой картинкой.
million.png
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_())

