Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- import sqlite3
- from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton, QVBoxLayout, QWidget, QRadioButton, \
- QMessageBox
- class Quiz(QWidget):
- def init(self):
- super().init()
- self.setWindowTitle('Викторина')
- self.layout = QVBoxLayout()
- self.setLayout(self.layout)
- # Подключение к базе данных SQLite3
- self.conn = sqlite3.connect('quiz.db')
- self.cursor = self.conn.cursor()
- # Создание таблицы вопросов, если она не существует
- self.cursor.execute("CREATE TABLE IF NOT EXISTS questions (id INTEGER PRIMARY KEY, question TEXT, option1 TEXT, option2 TEXT, option3 TEXT, correct_answer TEXT)")
- # Заполнение базы данных вопросами
- self.cursor.execute("SELECT COUNT(*) FROM questions")
- count = self.cursor.fetchone()[0]
- if count == 0:
- self.cursor.execute("INSERT INTO questions (question, option1, option2, option3, correct_answer) VALUES ('Какой язык программирования используется в PyQt5?', 'Python', 'JavaScript', 'C++', 'Python')")
- self.cursor.execute("INSERT INTO questions (question, option1, option2, option3, correct_answer) VALUES ('Какая функция используется для установки заголовка окна в PyQt5?', 'setWindowTitle()', 'setText()', 'setCaption()', 'setWindowTitle()')")
- self.cursor.execute("INSERT INTO questions (question, option1, option2, option3, correct_answer) VALUES ('Как добавить кнопку в окно PyQt5?', 'QPushButton', 'QLabel', 'QComboBox', 'QPushButton')")
- self.conn.commit()
- # Получение вопроса из базы данных
- self.cursor.execute("SELECT * FROM questions ORDER BY RANDOM() LIMIT 1")
- question = self.cursor.fetchone()
- # Создание виджетов для отображения вопроса и вариантов ответа
- self.question_label = QLabel(question[1])
- self.layout.addWidget(self.question_label)
- self.option1_radio = QRadioButton(question[2])
- self.option2_radio = QRadioButton(question[3])
- self.option3_radio = QRadioButton(question[4])
- self.layout.addWidget(self.option1_radio)
- self.layout.addWidget(self.option2_radio)
- self.layout.addWidget(self.option3_radio)
- self.submit_btn = QPushButton('Ответить')
- self.submit_btn.clicked.connect(self.check_answer)
- self.layout.addWidget(self.submit_btn)
- def check_answer(self):
- # Проверка выбранного ответа
- selected_answer = None
- if self.option1_radio.isChecked():
- selected_answer = self.option1_radio.text()
- elif self.option2_radio.isChecked():
- selected_answer = self.option2_radio.text()
- elif self.option3_radio.isChecked():
- selected_answer = self.option3_radio.text()
- if selected_answer is not None:
- self.cursor.execute("SELECT correct_answer FROM questions WHERE question=?", (self.question_label.text(),))
- correct_answer = self.cursor.fetchone()[0]
- if selected_answer == correct_answer:
- messagebox = QMessageBox()
- messagebox.setWindowTitle('Результат')
- messagebox.setText('Правильно!')
- messagebox.exec_()
- else:
- messagebox = QMessageBox()
- messagebox.setWindowTitle('Результат')
- messagebox.setText(f'Неправильно! Правильный ответ: {correct_answer}')
- messagebox.exec_()
- # Получение нового вопроса из базы данных
- self.cursor.execute("SELECT * FROM questions ORDER BY RANDOM() LIMIT 1")
- question = self.cursor.fetchone()
- self.question_label.setText(question[1])
- self.option1_radio.setText(question[2])
- self.option2_radio.setText(question[3])
- self.option3_radio.setText(question[4])
- else:
- messagebox = QMessageBox()
- messagebox.setWindowTitle('Ошибка')
- messagebox.setText('Пожалуйста, выберите ответ!')
- messagebox.exec_()
- def closeEvent(self, event):
- # Закрытие подключения к базе данных при завершении приложения
- self.cursor.close()
- self.conn.close()
- if __name__ == '__main__':
- app = QApplication(sys.argv)
- quiz = Quiz()
- quiz.show()
- sys.exit(app.exec_())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement