Я создал QTableWidget, имеющий четыре столбца.Первый столбец представляет собой текстовое поле, а остальные три - переключатели.Цель состоит в том, чтобы сделать все переключатели в строке эксклюзивными.
Фрагмент кода выглядит следующим образом:
#Create a table having one row and four columns
searchView = QTableWidget(1,4)
#Input data to create table
dirNames = {'A':['/tmp', '/tmp/dir1'], 'B':['/tmp/dir2'], 'C':['/tmp/dir3']}
#calculate the number of rows needed in table
rowCount = len(dirNames["A"]) + len(dirNames["B"]) + len(dirNames["C"])
searchView.setRowCount(rowCount)
#Set the horizontal header names
searchView.setHorizontalHeaderLabels(["DIR", "A", "B", "C"])
index = 0
for action in dirNames:
for paths in dirNames[action]:
#Create QTableWidgetItem for directory name
item = QTableWidgetItem(paths)
searchView.setItem(index, 0, item)
#Create three radio buttons
buttonA = QRadioButton()
buttonB = QRadioButton()
buttonC = QRadioButton()
#Check the radio button based on action
if action == 'A':
buttonA.setChecked(True)
elif action == 'B':
buttonB.setChecked(True)
else:
buttonC.setCheched(True)
#Add radio button to corresponding table item
searchView.setCellWidget(index, 1, buttonA)
searchView.setCellWidget(index, 2, buttonB)
searchView.setCellWidget(index, 3, buttonC)
#Since setCellWidget transfers the ownership of all radio buttons to qtablewidget Now all radio buttons in table are exclusive
#So create a buttongroup and add all radio buttons in a row to it so that only radio buttons in a row are exclusive
buttonGroup = QButtonGroup()
buttonGroup.addButton(searchView.cellWidget(index, 1))
buttonGroup.addButton(searchView.cellWidget(index, 2))
buttonGroup.addButton(searchView.cellWidget(index, 3))
index += 1
По некоторым причинам переключатели в строке не являются эксклюзивными.Мы можем проверить до четырех переключателей, и они распределены по столу.