Advertisement
strCarne

Untitled

Dec 6th, 2023
240
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.85 KB | None | 0 0
  1. import sys
  2. import sqlite3
  3. from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton, QVBoxLayout, QWidget, QRadioButton, \
  4.     QMessageBox
  5.  
  6. class Quiz(QWidget):
  7.     def init(self):
  8.         super().init()
  9.  
  10.         self.setWindowTitle('Викторина')
  11.         self.layout = QVBoxLayout()
  12.         self.setLayout(self.layout)
  13.  
  14.         # Подключение к базе данных SQLite3
  15.         self.conn = sqlite3.connect('quiz.db')
  16.         self.cursor = self.conn.cursor()
  17.  
  18.         # Создание таблицы вопросов, если она не существует
  19.         self.cursor.execute("CREATE TABLE IF NOT EXISTS questions (id INTEGER PRIMARY KEY, question TEXT, option1 TEXT, option2 TEXT, option3 TEXT, correct_answer TEXT)")
  20.  
  21.         # Заполнение базы данных вопросами
  22.         self.cursor.execute("SELECT COUNT(*) FROM questions")
  23.         count = self.cursor.fetchone()[0]
  24.         if count == 0:
  25.             self.cursor.execute("INSERT INTO questions (question, option1, option2, option3, correct_answer) VALUES ('Какой язык программирования используется в PyQt5?', 'Python', 'JavaScript', 'C++', 'Python')")
  26.             self.cursor.execute("INSERT INTO questions (question, option1, option2, option3, correct_answer) VALUES ('Какая функция используется для установки заголовка окна в PyQt5?', 'setWindowTitle()', 'setText()', 'setCaption()', 'setWindowTitle()')")
  27.             self.cursor.execute("INSERT INTO questions (question, option1, option2, option3, correct_answer) VALUES ('Как добавить кнопку в окно PyQt5?', 'QPushButton', 'QLabel', 'QComboBox', 'QPushButton')")
  28.             self.conn.commit()
  29.  
  30.         # Получение вопроса из базы данных
  31.         self.cursor.execute("SELECT * FROM questions ORDER BY RANDOM() LIMIT 1")
  32.         question = self.cursor.fetchone()
  33.  
  34.         # Создание виджетов для отображения вопроса и вариантов ответа
  35.         self.question_label = QLabel(question[1])
  36.         self.layout.addWidget(self.question_label)
  37.  
  38.         self.option1_radio = QRadioButton(question[2])
  39.         self.option2_radio = QRadioButton(question[3])
  40.         self.option3_radio = QRadioButton(question[4])
  41.         self.layout.addWidget(self.option1_radio)
  42.         self.layout.addWidget(self.option2_radio)
  43.         self.layout.addWidget(self.option3_radio)
  44.  
  45.         self.submit_btn = QPushButton('Ответить')
  46.         self.submit_btn.clicked.connect(self.check_answer)
  47.         self.layout.addWidget(self.submit_btn)
  48.  
  49.     def check_answer(self):
  50.         # Проверка выбранного ответа
  51.         selected_answer = None
  52.         if self.option1_radio.isChecked():
  53.             selected_answer = self.option1_radio.text()
  54.         elif self.option2_radio.isChecked():
  55.             selected_answer = self.option2_radio.text()
  56.         elif self.option3_radio.isChecked():
  57.             selected_answer = self.option3_radio.text()
  58.  
  59.         if selected_answer is not None:
  60.             self.cursor.execute("SELECT correct_answer FROM questions WHERE question=?", (self.question_label.text(),))
  61.             correct_answer = self.cursor.fetchone()[0]
  62.  
  63.             if selected_answer == correct_answer:
  64.                 messagebox = QMessageBox()
  65.                 messagebox.setWindowTitle('Результат')
  66.                 messagebox.setText('Правильно!')
  67.                 messagebox.exec_()
  68.             else:
  69.                 messagebox = QMessageBox()
  70.                 messagebox.setWindowTitle('Результат')
  71.                 messagebox.setText(f'Неправильно! Правильный ответ: {correct_answer}')
  72.                 messagebox.exec_()
  73.                 # Получение нового вопроса из базы данных
  74.                 self.cursor.execute("SELECT * FROM questions ORDER BY RANDOM() LIMIT 1")
  75.                 question = self.cursor.fetchone()
  76.                 self.question_label.setText(question[1])
  77.                 self.option1_radio.setText(question[2])
  78.                 self.option2_radio.setText(question[3])
  79.                 self.option3_radio.setText(question[4])
  80.         else:
  81.             messagebox = QMessageBox()
  82.             messagebox.setWindowTitle('Ошибка')
  83.             messagebox.setText('Пожалуйста, выберите ответ!')
  84.             messagebox.exec_()
  85.  
  86.     def closeEvent(self, event):
  87.         # Закрытие подключения к базе данных при завершении приложения
  88.         self.cursor.close()
  89.         self.conn.close()
  90.  
  91.  
  92. if __name__ == '__main__':
  93.     app = QApplication(sys.argv)
  94.     quiz = Quiz()
  95.     quiz.show()
  96.     sys.exit(app.exec_())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement