One way to do it would be:
connect the itemClicked
signal of the table to a handler
test the checkedState
of the clicked item in the handler
if the item is checked, add its row
to the list
Example code:
PyQt5/6:
from PyQt5 import QtCore, QtWidgets
# from PyQt6 import QtCore, QtWidgets
class Window(QtWidgets.QWidget):
def __init__(self, rows, columns):
super().__init__()
self.table = QtWidgets.QTableWidget(rows, columns, self)
for column in range(columns):
for row in range(rows):
item = QtWidgets.QTableWidgetItem('Text%d' % row)
if row % 2:
item.setFlags(QtCore.Qt.ItemFlag.ItemIsUserCheckable |
QtCore.Qt.ItemFlag.ItemIsEnabled)
item.setCheckState(QtCore.Qt.CheckState.Unchecked)
self.table.setItem(row, column, item)
self.table.itemClicked.connect(self.handleItemClicked)
layout = QtWidgets.QVBoxLayout(self)
layout.addWidget(self.table)
self._list = []
def handleItemClicked(self, item):
if item.checkState() == QtCore.Qt.CheckState.Checked:
print('"%s" Checked' % item.text())
self._list.append(item.row())
print(self._list)
else:
print('"%s" Clicked' % item.text())
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
window = Window(6, 3)
window.resize(350, 300)
window.show()
sys.exit(app.exec())
PyQt4:
from PyQt4 import QtGui, QtCore
class Window(QtGui.QWidget):
def __init__(self, rows, columns):
QtGui.QWidget.__init__(self)
self.table = QtGui.QTableWidget(rows, columns, self)
for column in range(columns):
for row in range(rows):
item = QtGui.QTableWidgetItem('Text%d' % row)
if row % 2:
item.setFlags(QtCore.Qt.ItemIsUserCheckable |
QtCore.Qt.ItemIsEnabled)
item.setCheckState(QtCore.Qt.Unchecked)
self.table.setItem(row, column, item)
self.table.itemClicked.connect(self.handleItemClicked)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.table)
self._list = []
def handleItemClicked(self, item):
if item.checkState() == QtCore.Qt.Checked:
print('"%s" Checked' % item.text())
self._list.append(item.row())
print(self._list)
else:
print('"%s" Clicked' % item.text())
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window(6, 3)
window.resize(350, 300)
window.show()
sys.exit(app.exec_())
clicked
signal of youchkBoxItem
to a proper method? – Garwin