PyQt: checkbox in QTableWidget

I use the following code to check the 9th column of my QTableWidget

 chkBoxItem = QtGui.QTableWidgetItem() chkBoxItem.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled) chkBoxItem.setCheckState(QtCore.Qt.Unchecked) table.setItem(rowNo,9,chkBoxItem) 

Where table my QtTableWidget . I need to add the line where the checkbox is checked to the list. How can I achieve this?

Yours faithfully,

+4
source share
1 answer

One way to do this:

  • connect itemClicked table signal to the handler

  • check checkedState clicked item in handler

  • if an item is checked, add its row to the list

Code example:

 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_()) 
+8
source

Source: https://habr.com/ru/post/1433544/


All Articles