Нужно чтобы при нажатии на один 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()
