Как правильно создать чекбокс в PyQT

Рейтинг: -1Ответов: 1Опубликовано: 27.03.2023

Всем добрый день, есть вот такой код,

class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        self.question_list = []
        self.question = ''
        self.ammount_of_questions = 4
        self.wrong_answer_count = 0
        self.wb_obj = openpyxl.load_workbook("questions.xlsx")
        self.ButtonNext.clicked.connect(self.get_next_question)

        self.start_quiz()
        self.get_next_question()

    def get_next_question(self):
        logging.info('Переключение вопроса')
        num_question = len(self.question_list)
        if num_question < 3:
            wb_sheet = self.wb_obj['Block_1']
        elif num_question == 3:
            wb_sheet = self.wb_obj['Block_2']
        elif num_question == 4:
            wb_sheet = self.wb_obj['Block_3']
        else:
            self.end_test()
            return

        answer = self.EntryField.toPlainText()
        rows = wb_sheet.max_row
        nums_wb = randint(2, rows)
        question = wb_sheet[f'A{nums_wb}'].value
        self.question_list.append(question)
        self.QuestionField.setText(question)
        if num_question:
            self.write_to_file(self.question, answer)
            self.EntryField.clear()

        self.question = question

        if num_question == self.ammount_of_questions:
            self.end_test()
            return




    def start_quiz(self):
        logging.info('Приветствие')
        greetings = QMessageBox()
        greetings.setWindowTitle('Приветствие')
        greetings.setText(
            f'Приветствую Вас {os.getlogin()}. Предлогаю в начале рабочего дня пройти тебе тест на знание наших цен и предложений')
        greetings.setIcon(QMessageBox.Information)
        greetings.exec_()

обычный тест который берет вопросы из файла в файле есть блоки, во втором блоке вопросы с множественным выбором. Подскажите как правильно реализовать чек боксы именно во втором блоке. В данный момент реализовано только поле ввода. И также как получить значение чекбокса

Ответы

▲ 0

Можно использовать QCheckBox

class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        # ...

        # добавить чекбоксы на форму и в макет
        self.checkbox1 = QtWidgets.QCheckBox('Вариант 1')
        self.checkbox2 = QtWidgets.QCheckBox('Вариант 2')
        self.checkbox3 = QtWidgets.QCheckBox('Вариант 3')
        self.checkbox4 = QtWidgets.QCheckBox('Вариант 4')
        self.verticalLayout.addWidget(self.checkbox1)
        self.verticalLayout.addWidget(self.checkbox2)
        self.verticalLayout.addWidget(self.checkbox3)
        self.verticalLayout.addWidget(self.checkbox4)

        self.start_quiz()
        self.get_next_question()

    def get_next_question(self):
        # ...

        # получить значения чекбоксов
        checkbox1_value = self.checkbox1.isChecked()
        checkbox2_value = self.checkbox2.isChecked()
        checkbox3_value = self.checkbox3.isChecked()
        checkbox4_value = self.checkbox4.isChecked()

        # ...