Нужно чтобы при нажатии на один Checkbox, второй чекбокс не мог нажиматься

Помогите реализовать чтобы при нажатии на один Checkbox, второй чекбокс не мог нажиматься.


Ответы (1 шт):

Автор решения: S. Nick

void QCheckBox::stateChanged(int state)

Этот сигнал испускается всякий раз, когда изменяется состояние флажка, то есть всякий раз, когда пользователь проверяет или снимает флажок.

enabled : bool

Это свойство указывает, включен ли виджет. Обычно включенный виджет обрабатывает события клавиатуры и мыши; отключенный виджет - нет. Исключение составляет QAbstractButton.

import sys
from PyQt5 import QtWidgets, QtCore, QtGui


class Window(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        
        self.checkOne = QtWidgets.QCheckBox('one')
        self.checkTwo = QtWidgets.QCheckBox('two')
        
        self.vlayout  = QtWidgets.QVBoxLayout()
        self.vlayout.addWidget(self.checkOne)
        self.vlayout.addWidget(self.checkTwo)
        self.setLayout(self.vlayout)
        
        self.checkOne.stateChanged.connect(self.selectBooks1)            # !!!
        self.checkTwo.stateChanged.connect(self.selectBooks2)            # !!!

    def selectBooks1(self, toggle):
        if toggle == QtCore.Qt.Checked:
            print('checked 1')
            self.checkTwo.setEnabled(False)                              # !!!
        else:
            print('unchecked 1')
            self.checkTwo.setEnabled(True)                               # !!!

    def selectBooks2(self, toggle):
        if toggle == QtCore.Qt.Checked:
            print('checked 2')
            self.checkOne.setEnabled(False)
        else:
            print('unchecked 2')
            self.checkOne.setEnabled(True)


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    w = Window()
    w.show()
    app.exec()

введите сюда описание изображения

→ Ссылка