Загрузка данных
```python
import sys
from PyQt6.QtWidgets import *
from PyQt6.QtGui import QRegularExpressionValidator
from PyQt6.QtCore import QRegularExpression
app = QApplication(sys.argv)
s = QWidget()
s.setWindowTitle("Тест")
s.resize(500, 600)
stak = QStackedWidget()
p1 = QWidget()
l1 = QVBoxLayout(p1)
l1.addWidget(QLabel("Вопрос 1. Выберите вариант A"))
cb1a = QCheckBox("A"); l1.addWidget(cb1a)
cb1b = QCheckBox("B"); l1.addWidget(cb1b)
l1.addWidget(QLabel("Вопрос 2. Выберите вариант B"))
cb2a = QCheckBox("A"); l1.addWidget(cb2a)
cb2b = QCheckBox("B"); l1.addWidget(cb2b)
l1.addWidget(QLabel("Вопрос 3. Выберите оба"))
cb3a = QCheckBox("A"); l1.addWidget(cb3a)
cb3b = QCheckBox("B"); l1.addWidget(cb3b)
l1.addWidget(QLabel("Вопрос 4. Выберите вариант A"))
cb4a = QCheckBox("A"); l1.addWidget(cb4a)
cb4b = QCheckBox("B"); l1.addWidget(cb4b)
l1.addWidget(QLabel("Вопрос 5. Выберите вариант B"))
cb5a = QCheckBox("A"); l1.addWidget(cb5a)
cb5b = QCheckBox("B"); l1.addWidget(cb5b)
stak.addWidget(p1)
p2 = QWidget()
l2 = QVBoxLayout(p2)
l2.addWidget(QLabel("Вопрос 1. Столица России?"))
g1 = QButtonGroup(p2)
rb1a = QRadioButton("Москва"); g1.addButton(rb1a); l2.addWidget(rb1a)
rb1b = QRadioButton("СПб"); g1.addButton(rb1b); l2.addWidget(rb1b)
l2.addWidget(QLabel("Вопрос 2. 7*8 = ?"))
g2 = QButtonGroup(p2)
rb2a = QRadioButton("54"); g2.addButton(rb2a); l2.addWidget(rb2a)
rb2b = QRadioButton("56"); g2.addButton(rb2b); l2.addWidget(rb2b)
l2.addWidget(QLabel("Вопрос 3. Газ в атмосфере?"))
g3 = QButtonGroup(p2)
rb3a = QRadioButton("O2"); g3.addButton(rb3a); l2.addWidget(rb3a)
rb3b = QRadioButton("N2"); g3.addButton(rb3b); l2.addWidget(rb3b)
l2.addWidget(QLabel("Вопрос 4. Первый полёт в космос?"))
g4 = QButtonGroup(p2)
rb4a = QRadioButton("1957"); g4.addButton(rb4a); l2.addWidget(rb4a)
rb4b = QRadioButton("1961"); g4.addButton(rb4b); l2.addWidget(rb4b)
l2.addWidget(QLabel("Вопрос 5. Автор 'Войны и мира'?"))
g5 = QButtonGroup(p2)
rb5a = QRadioButton("Толстой"); g5.addButton(rb5a); l2.addWidget(rb5a)
rb5b = QRadioButton("Чехов"); g5.addButton(rb5b); l2.addWidget(rb5b)
stak.addWidget(p2)
p3 = QWidget()
l3 = QVBoxLayout(p3)
l3.addWidget(QLabel("Вопрос 1. Введите целое число"))
le1 = QLineEdit()
le1.setValidator(QRegularExpressionValidator(QRegularExpression(r"^\d+$")))
l3.addWidget(le1)
l3.addWidget(QLabel("Вопрос 2. Введите целое число"))
le2 = QLineEdit()
le2.setValidator(QRegularExpressionValidator(QRegularExpression(r"^\d+$")))
l3.addWidget(le2)
l3.addWidget(QLabel("Вопрос 3. Введите вещественное число"))
le3 = QLineEdit()
le3.setValidator(QRegularExpressionValidator(QRegularExpression(r"^\d+([.,]\d+)?$")))
l3.addWidget(le3)
l3.addWidget(QLabel("Вопрос 4. Введите дату ДД.ММ.ГГГГ"))
le4 = QLineEdit()
le4.setValidator(QRegularExpressionValidator(QRegularExpression(r"^\d{2}\.\d{2}\.\d{4}$")))
l3.addWidget(le4)
l3.addWidget(QLabel("Вопрос 5. Введите вещественное число"))
le5 = QLineEdit()
le5.setValidator(QRegularExpressionValidator(QRegularExpression(r"^\d+([.,]\d+)?$")))
l3.addWidget(le5)
stak.addWidget(p3)
p4 = QWidget()
l4 = QVBoxLayout(p4)
l4.addWidget(QLabel("Результаты сессии"))
stak.addWidget(p4)
p5 = QWidget()
l5 = QVBoxLayout(p5)
l5.addWidget(QLabel("Анализ по вопросам"))
stak.addWidget(p5)
def go_prev():
if stak.currentIndex() > 0:
stak.setCurrentIndex(stak.currentIndex() - 1)
def go_next():
i = stak.currentIndex()
if i == 1:
if not (rb1a.isChecked() or rb1b.isChecked()) or \
not (rb2a.isChecked() or rb2b.isChecked()) or \
not (rb3a.isChecked() or rb3b.isChecked()) or \
not (rb4a.isChecked() or rb4b.isChecked()) or \
not (rb5a.isChecked() or rb5b.isChecked()):
QMessageBox.warning(s, "Ошибка", "Ответьте на все вопросы!")
return
if i == 2:
if not le1.text().strip() or not le2.text().strip() or \
not le3.text().strip() or not le4.text().strip() or not le5.text().strip():
QMessageBox.warning(s, "Ошибка", "Заполните все поля!")
return
if i < stak.count() - 1:
stak.setCurrentIndex(i + 1)
if i + 1 == 3:
v1 = (cb1a.isChecked() and not cb1b.isChecked())
v2 = (cb2b.isChecked() and not cb2a.isChecked())
v3 = (cb3a.isChecked() and cb3b.isChecked())
v4 = (cb4a.isChecked() and not cb4b.isChecked())
v5 = (cb5b.isChecked() and not cb5a.isChecked())
v6 = rb1a.isChecked()
v7 = rb2b.isChecked()
v8 = rb3b.isChecked()
v9 = rb4b.isChecked()
v10 = rb5a.isChecked()
v11 = le1.text().strip() == "42"
v12 = le2.text().strip() == "7"
v13 = abs(float(le3.text().replace(",", ".")) - 3.14) < 1e-6
v14 = le4.text().strip() == "01.01.2020"
v15 = abs(float(le5.text().replace(",", ".")) - 2.5) < 1e-6
correct = v1 + v2 + v3 + v4 + v5 + v6 + v7 + v8 + v9 + v10 + v11 + v12 + v13 + v14 + v15
wrong = 15 - correct
while l4.count():
w = l4.takeAt(0).widget()
if w: w.deleteLater()
l4.addWidget(QLabel("Дано верных ответов: " + str(correct)))
l4.addWidget(QLabel("Дано не верных ответов: " + str(wrong)))
l4.addWidget(QLabel("Процент верных: " + str(round(correct / 15 * 100, 1)) + "%"))
l4.addWidget(QLabel("Процент не верных: " + str(round(wrong / 15 * 100, 1)) + "%"))
if i + 1 == 4:
v1 = (cb1a.isChecked() and not cb1b.isChecked())
v2 = (cb2b.isChecked() and not cb2a.isChecked())
v3 = (cb3a.isChecked() and cb3b.isChecked())
v4 = (cb4a.isChecked() and not cb4b.isChecked())
v5 = (cb5b.isChecked() and not cb5a.isChecked())
v6 = rb1a.isChecked()
v7 = rb2b.isChecked()
v8 = rb3b.isChecked()
v9 = rb4b.isChecked()
v10 = rb5a.isChecked()
v11 = le1.text().strip() == "42"
v12 = le2.text().strip() == "7"
v13 = abs(float(le3.text().replace(",", ".")) - 3.14) < 1e-6
v14 = le4.text().strip() == "01.01.2020"
v15 = abs(float(le5.text().replace(",", ".")) - 2.5) < 1e-6
while l5.count():
w = l5.takeAt(0).widget()
if w: w.deleteLater()
l5.addWidget(QLabel("Вопрос 1: " + ("верно" if v1 else "неверно")))
l5.addWidget(QLabel("Вопрос 2: " + ("верно" if v2 else "неверно")))
l5.addWidget(QLabel("Вопрос 3: " + ("верно" if v3 else "неверно")))
l5.addWidget(QLabel("Вопрос 4: " + ("верно" if v4 else "неверно")))
l5.addWidget(QLabel("Вопрос 5: " + ("верно" if v5 else "неверно")))
l5.addWidget(QLabel("Вопрос 6: " + ("верно" if v6 else "неверно")))
l5.addWidget(QLabel("Вопрос 7: " + ("верно" if v7 else "неверно")))
l5.addWidget(QLabel("Вопрос 8: " + ("верно" if v8 else "неверно")))
l5.addWidget(QLabel("Вопрос 9: " + ("верно" if v9 else "неверно")))
l5.addWidget(QLabel("Вопрос 10: " + ("верно" if v10 else "неверно")))
l5.addWidget(QLabel("Вопрос 11: " + ("верно" if v11 else "неверно")))
l5.addWidget(QLabel("Вопрос 12: " + ("верно" if v12 else "неверно")))
l5.addWidget(QLabel("Вопрос 13: " + ("верно" if v13 else "неверно")))
l5.addWidget(QLabel("Вопрос 14: " + ("верно" if v14 else "неверно")))
l5.addWidget(QLabel("Вопрос 15: " + ("верно" if v15 else "неверно")))
btn_prev = QPushButton("◀ Назад")
btn_next = QPushButton("Вперёд ▶")
btn_prev.clicked.connect(go_prev)
btn_next.clicked.connect(go_next)
nav = QHBoxLayout()
nav.addWidget(btn_prev)
nav.addWidget(btn_next)
layout = QVBoxLayout(s)
layout.addWidget(stak)
layout.addLayout(nav)
s.show()
sys.exit(app.exec())
```