Задержка кнопки и переход на следующий слайд
Есть программа, после нажатия на правильный ответ нужна задержка 3 секунды и потом поменять вопрос и ответы.
Не понимаю как в windowgroup поменять ответы и как сделать переход на следующий слайд.
Я начал писать метод third().
Код:
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import webbrowser
class WindowGroup(QWidget):
def __init__(self):
super().__init__()
self.setObjectName('windowgroup')
self.label = QLabel('<h1 style="color: rgb(185, 255, 0);">Що приказка не радить виносити з хати, щоб не розголошувати сімейні розбрати?</h1>')
self.radioGroupBox = QGroupBox('')
self.radioGroup = QButtonGroup()
self.rbtn_1 = QPushButton('А: Сміття')
self.rbtn_2 = QPushButton('В: Сор')
self.rbtn_3 = QPushButton('С: Пил')
self.rbtn_4 = QPushButton('D: Меблі')
self.radioGroup.addButton(self.rbtn_1)
self.radioGroup.addButton(self.rbtn_2)
self.radioGroup.addButton(self.rbtn_3)
self.radioGroup.addButton(self.rbtn_4)
self.hint_5050 = QPushButton(self)
self.hint_5050.setIcon(QIcon('5050_normal.png'))
self.hint_5050.setIconSize(QSize(105, 90))
self.hint_5050.setFixedSize(120, 100)
self.hint_audience = QPushButton(self)
self.hint_audience.setIcon(QIcon('audience_normal.png'))
self.hint_audience.setIconSize(QSize(105, 90))
self.hint_audience.setFixedSize(120, 100)
self.hint_expert = QPushButton(self)
self.hint_expert.setIcon(QIcon('expert_normal.png'))
self.hint_expert.setIconSize(QSize(105, 90))
self.hint_expert.setFixedSize(120, 100)
self.hint_switch = QPushButton(self)
self.hint_switch.setIcon(QIcon('switch_2_normal.png'))
self.hint_switch.setIconSize(QSize(105, 90))
self.hint_switch.setFixedSize(120, 100)
layout_ans1 = QHBoxLayout()
layout_ans2 = QVBoxLayout()
layout_ans3 = QVBoxLayout()
layout_ans2.addWidget(self.rbtn_1)
layout_ans2.addWidget(self.rbtn_2)
layout_ans3.addWidget(self.rbtn_3)
layout_ans3.addWidget(self.rbtn_4)
layout_ans1.addLayout(layout_ans2)
layout_ans1.addLayout(layout_ans3)
self.radioGroupBox.setLayout(layout_ans1)
layout = QVBoxLayout(self)
layout.addWidget(self.label, alignment=Qt.AlignCenter)
layout.addWidget(self.radioGroupBox)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.centralWidget = QWidget()
self.centralWidget.setObjectName('centralWidget')
self.setCentralWidget(self.centralWidget)
self.num = 0
self.question = QLabel('<h1 style="color: rgb(250, 55, 55);">Правила гри')
self.rules = QLabel('''Гра "Хто хоче стати мільйонером?"
\
Ви повинні правильно відповісти на низку питань \
з кількома варіантами відповідей, щоб заробити 3.000.000 грн. \
Всього 15 питань, кожне питання коштує певної суми грошей, \
учасники не мають жодних тимчасових обмежень для надання \
відповіді. Учасник також отримуює 4 види підказок, щоб допомогти собі, \
якщо вони застрягли на конкретному питанні.
\
Більше ознайомитися з правилами можна, натиснувши на кнопку.
\
Хай щастить!''')
self.rules.setStyleSheet("""
font: bold;
color: rgb(185, 255, 0);
""")
self.rules.setFixedSize(1010,450)
self.rules.setObjectName('rules')
self.rules.setWordWrap(True)
self.button_rules = QPushButton('Правила')
self.button_rules.clicked.connect(lambda: webbrowser.open('https://ru.wwbm.com/rules'))
self.button_rules.setFixedSize(300,50)
self.button_start = QPushButton('Почати', clicked=self._start)
self.button_start.setFixedSize(300,50)
self.layout = QVBoxLayout(self.centralWidget)
self.lineH1 = QHBoxLayout()
lineH2 = QHBoxLayout()
lineH3 = QHBoxLayout()
self.lineH1.addWidget(self.question, alignment=Qt.AlignHCenter)
lineH2.addWidget(self.rules)
lineH3.addWidget(self.button_rules, alignment=Qt.AlignCenter)
lineH3.addWidget(self.button_start, alignment=Qt.AlignCenter)
self.layout.addLayout(self.lineH1)
self.layout.addWidget(self.rules, alignment=Qt.AlignHCenter)
self.layout.addLayout(lineH3)
self.timer = QTimer(self)
self.timer.timeout.connect(self.update_timer)
self.windowGroup = WindowGroup()
self.windowGroup.rbtn_1.clicked.connect(self.on_clicked)
self.windowGroup.rbtn_2.clicked.connect(self.on_clicked)
self.windowGroup.rbtn_3.clicked.connect(self.on_clicked)
self.windowGroup.rbtn_4.clicked.connect(self.on_clicked)
def on_clicked(self):
self.windowGroup.setEnabled(False)
sender = self.sender()
if sender.text() == 'А: Сміття':
sender.setStyleSheet("background-color: green;")
else:
sender.setStyleSheet("background-color: red;")
def update_timer(self):
self.question.setText(f'<h1 style="color: rgb(250, 55, 55);">{self.num}</h1>')
if self.num == 0:
self.timer.stop()
self.setStyleSheet("""
QLabel, QPushButton {
font-size: 20pt;
}
#rules {
background-color: #ccffbd;
}
#windowgroup > QLabel {
font-size: 11pt;
}
#windowgroup > QGroupBox {
background-color: #a44500;
font-size: 20pt;
}
QPushButton {
background-color: #D98C00;
font-size: 34px;
}
QPushButton:hover {
background-color: #0082fc;
border: 2px solid #FFA6D5;
}
#centralWidget {
background-image: url(first.jpg);
}
""")
self.question.setPixmap(QPixmap("million.png"))
self.num = 3
self.rules.hide()
self.button_start.hide()
self.button_rules.hide()
self.layout.addWidget(self.windowGroup, alignment=Qt.AlignHCenter)
self.lineH1.insertStretch(0)
self.lineH1.insertWidget(1, self.windowGroup.hint_5050)
self.lineH1.insertStretch(2)
self.lineH1.insertWidget(3, self.windowGroup.hint_audience)
self.lineH1.insertStretch(4)
self.lineH1.insertStretch(-1)
self.lineH1.insertWidget(-1, self.windowGroup.hint_expert)
self.lineH1.insertStretch(-1)
self.lineH1.insertWidget(-1, self.windowGroup.hint_switch)
self.lineH1.insertStretch(-1)
return
self.num -= 1
def _start(self):
self.timer.start(1000)
def third(self):
self.label.setText('Скільки становив зріст найвищої людини України Леоніда Стадніка?')
self.windowgroup.setText('А: 301, В: 257, С: 290, D: 310')
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
app.setStyleSheet("""
QLabel {
font-size: 20pt;
}
QPushButton {
font-size: 20pt;
background-color: #ff8000;
}
#centralWidget {
background-image: url(first.jpg);
}
""")
w = MainWindow()
w.setWindowTitle('Million')
w.resize(1700, 770)
w.move(125, 110)
w.show()
sys.exit(app.exec_())
Файли которые нужны:
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Класс QTimer предоставляет повторяющиеся и однократные таймеры.
singleShot : bool
Это свойство указывает, является ли таймер однократным.
Таймер одиночного выстрела срабатывает только один раз.
QTimer.singleShot(3000, self.third) # !!! +++
Все остальное смотрите по тексту.
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import webbrowser
class WindowGroup(QWidget):
def __init__(self):
super().__init__()
self.setObjectName('windowgroup')
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
self.quantity_questions = 2
self.list_questions = [ # это вопросы
'<h1 style="color: rgb(185, 255, 0);">Що приказка не радить виносити з хати, щоб не розголошувати сімейні розбрати?</h1>',
'<h1 style="color: rgb(185, 255, 0);">Это второй вопрос?</h1>',
]
self.list_buttons = [ # это ответы
['А: Сміття', 'В: Сор', 'С: Пил', 'D: Меблі'],
['А: Я непомню', 'В: Нет', 'С: Да', 'D: Это 3-й вопрос'],
]
self.list_yes_buttons = [ # это правильные ответы
'А: Сміття',
'С: Да',
]
self.current_question = 0 # <-- это индекс текущего вопроса
# +++ ^^^^^^^^^^^^^^^^^^^ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
self.label = QLabel(self.list_questions[self.current_question])
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
self.label.setTextFormat(Qt.RichText)
self.radioGroupBox = QGroupBox('')
self.radioGroup = QButtonGroup()
self.rbtn_1 = QPushButton('А: Сміття')
self.rbtn_2 = QPushButton('В: Сор')
self.rbtn_3 = QPushButton('С: Пил')
self.rbtn_4 = QPushButton('D: Меблі')
self.radioGroup.addButton(self.rbtn_1)
self.radioGroup.addButton(self.rbtn_2)
self.radioGroup.addButton(self.rbtn_3)
self.radioGroup.addButton(self.rbtn_4)
self.hint_5050 = QPushButton(self)
self.hint_5050.setIcon(QIcon('5050_normal.png'))
self.hint_5050.setIconSize(QSize(105, 90))
self.hint_5050.setFixedSize(120, 100)
self.hint_audience = QPushButton(self)
self.hint_audience.setIcon(QIcon('audience_normal.png'))
self.hint_audience.setIconSize(QSize(105, 90))
self.hint_audience.setFixedSize(120, 100)
self.hint_expert = QPushButton(self)
self.hint_expert.setIcon(QIcon('expert_normal.png'))
self.hint_expert.setIconSize(QSize(105, 90))
self.hint_expert.setFixedSize(120, 100)
self.hint_switch = QPushButton(self)
self.hint_switch.setIcon(QIcon('switch_2_normal.png'))
self.hint_switch.setIconSize(QSize(105, 90))
self.hint_switch.setFixedSize(120, 100)
layout_ans1 = QHBoxLayout()
layout_ans2 = QVBoxLayout()
layout_ans3 = QVBoxLayout()
layout_ans2.addWidget(self.rbtn_1)
layout_ans2.addWidget(self.rbtn_2)
layout_ans3.addWidget(self.rbtn_3)
layout_ans3.addWidget(self.rbtn_4)
layout_ans1.addLayout(layout_ans2)
layout_ans1.addLayout(layout_ans3)
self.radioGroupBox.setLayout(layout_ans1)
layout = QVBoxLayout(self)
layout.addWidget(self.label, alignment=Qt.AlignCenter)
layout.addWidget(self.radioGroupBox)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.centralWidget = QWidget()
self.centralWidget.setObjectName('centralWidget')
self.setCentralWidget(self.centralWidget)
self.num = 0
self.question = QLabel('<h1 style="color: rgb(250, 55, 55);">Правила гри')
self.rules = QLabel('''Гра "Хто хоче стати мільйонером?"
\
Ви повинні правильно відповісти на низку питань \
з кількома варіантами відповідей, щоб заробити 3.000.000 грн. \
Всього 15 питань, кожне питання коштує певної суми грошей, \
учасники не мають жодних тимчасових обмежень для надання \
відповіді. Учасник також отримуює 4 види підказок, щоб допомогти собі, \
якщо вони застрягли на конкретному питанні.
\
Більше ознайомитися з правилами можна, натиснувши на кнопку.
\
Хай щастить!''')
self.rules.setStyleSheet("""
font: bold;
color: rgb(185, 255, 0);
""")
self.rules.setFixedSize(1010,450)
self.rules.setObjectName('rules')
self.rules.setWordWrap(True)
self.button_rules = QPushButton('Правила')
self.button_rules.clicked.connect(lambda: webbrowser.open('https://ru.wwbm.com/rules'))
self.button_rules.setFixedSize(300,50)
self.button_start = QPushButton('Почати', clicked=self._start)
self.button_start.setFixedSize(300,50)
self.layout = QVBoxLayout(self.centralWidget)
self.lineH1 = QHBoxLayout()
lineH2 = QHBoxLayout()
lineH3 = QHBoxLayout()
self.lineH1.addWidget(self.question, alignment=Qt.AlignHCenter)
lineH2.addWidget(self.rules)
lineH3.addWidget(self.button_rules, alignment=Qt.AlignCenter)
lineH3.addWidget(self.button_start, alignment=Qt.AlignCenter)
self.layout.addLayout(self.lineH1)
self.layout.addWidget(self.rules, alignment=Qt.AlignHCenter)
self.layout.addLayout(lineH3)
self.timer = QTimer(self)
self.timer.timeout.connect(self.update_timer)
# !!!
self.windowGroup = WindowGroup()
self.windowGroup.rbtn_1.clicked.connect(self.on_clicked)
self.windowGroup.rbtn_2.clicked.connect(self.on_clicked)
self.windowGroup.rbtn_3.clicked.connect(self.on_clicked)
self.windowGroup.rbtn_4.clicked.connect(self.on_clicked)
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
self.list_rbtn = [
self.windowGroup.rbtn_1,
self.windowGroup.rbtn_2,
self.windowGroup.rbtn_3,
self.windowGroup.rbtn_4,
]
self.correct_answer = '<h1 style="color: #4E9F3D;">Это правильные ответ</h1>'
self.wrong_answer = '<h1 style="color: #DA0037;">Это НЕ правильные ответ</h1>'
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
def on_clicked(self):
self.windowGroup.setEnabled(False)
sender = self.sender()
# !!!
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
self.sender_click = sender # +++
#- if sender.text() == 'А: Сміття':
if sender.text() in self.windowGroup.list_yes_buttons:
sender.setStyleSheet("background-color: green;")
self.windowGroup.label.setText(
f'{self.windowGroup.list_questions[self.windowGroup.current_question]} \
{self.correct_answer}'
)
else:
sender.setStyleSheet("background-color: red;")
self.windowGroup.label.setText(
f'{self.windowGroup.list_questions[self.windowGroup.current_question]} \
{self.wrong_answer}'
)
self.windowGroup.label.setAlignment(Qt.AlignCenter)
QTimer.singleShot(3000, self.third) # !!! +++
def set_stylesheet(self):
self.setStyleSheet("""
QLabel, QPushButton {
font-size: 20pt;
}
#rules {
background-color: #ccffbd;
}
#windowgroup > QLabel {
font-size: 11pt;
}
#windowgroup > QGroupBox {
background-color: #a44500;
font-size: 20pt;
}
QPushButton {
background-color: #D98C00;
font-size: 34px;
}
QPushButton:hover {
background-color: #0082fc;
border: 2px solid #FFA6D5;
}
#centralWidget {
background-image: url(first.jpg);
}
""")
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
def update_timer(self):
self.question.setText(f'<h1 style="color: rgb(250, 55, 55);">{self.num}</h1>')
if self.num == 0:
self.timer.stop()
# !!!
self.set_stylesheet() # +++
self.question.setPixmap(QPixmap("million.png"))
self.num = 3
self.rules.hide()
self.button_start.hide()
self.button_rules.hide()
self.layout.addWidget(self.windowGroup, alignment=Qt.AlignHCenter)
self.lineH1.insertStretch(0)
self.lineH1.insertWidget(1, self.windowGroup.hint_5050)
self.lineH1.insertStretch(2)
self.lineH1.insertWidget(3, self.windowGroup.hint_audience)
self.lineH1.insertStretch(4)
self.lineH1.insertStretch(-1)
self.lineH1.insertWidget(-1, self.windowGroup.hint_expert)
self.lineH1.insertStretch(-1)
self.lineH1.insertWidget(-1, self.windowGroup.hint_switch)
self.lineH1.insertStretch(-1)
return
self.num -= 1
def _start(self):
self.timer.start(1000)
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
def third(self):
self.windowGroup.setEnabled(True)
if self.windowGroup.current_question + 1 < self.windowGroup.quantity_questions:
self.windowGroup.current_question += 1
self.windowGroup.label.setText(
self.windowGroup.list_questions[self.windowGroup.current_question])
self.windowGroup.rbtn_1.setText(
self.windowGroup.list_buttons[self.windowGroup.current_question][0])
self.windowGroup.rbtn_2.setText(
self.windowGroup.list_buttons[self.windowGroup.current_question][1])
self.windowGroup.rbtn_3.setText(
self.windowGroup.list_buttons[self.windowGroup.current_question][2])
self.windowGroup.rbtn_4.setText(
self.windowGroup.list_buttons[self.windowGroup.current_question][3])
for rbtn in self.list_rbtn:
rbtn.setStyleSheet(
"background-color: #D98C00; width: 620px; height: 49px;")
self.set_stylesheet()
else:
self.windowGroup.label.setText(
'<h1 style="color: #FFDD93;">Игра закончена, спасибо за участие.</h1>'
)
self.windowGroup.setEnabled(False)
self.sender_click.setStyleSheet(
"background-color: #D98C00; width: 620px; height: 49px;")
self.windowGroup.label.setAlignment(Qt.AlignCenter)
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
app.setStyleSheet("""
QLabel {
font-size: 20pt;
}
QPushButton {
font-size: 20pt;
background-color: #ff8000;
}
#centralWidget {
background-image: url(first.jpg);
}
""")
w = MainWindow()
w.setWindowTitle('Million')
w.resize(1300, 770)
w.show()
sys.exit(app.exec_())






