With:
tableView = QTableView()
rows = [0, 1, 2]
tableView.selectRow(0) or tableView.selectRow(2) won't work in this situation since selectRow() selects only single row deselecting all others.
There is selectionModel().select() method available. But it accepts QSelectionItems object as the argument. How do we declare the QSelectionItem object having the row numbers?
You should set the selection mode.
tableView->setSelectionMode(QAbstractItemView::MultiSelection);
The code creates a QTableView and QPushButton. Pressing the button selects the indexes in continuous order (from index1 to index2. It is still an unswered question if it would be possible to select the indexes in any order.

def clicked():
tableView.setFocus()
selectionModel = tableView.selectionModel()
index1 = tableView.model().index(0, 0)
index2 = tableView.model().index(1, 2)
itemSelection = QtGui.QItemSelection(index1, index2)
selectionModel.select(itemSelection, QtGui.QItemSelectionModel.Rows | QtGui.QItemSelectionModel.Select)
app = QtGui.QApplication([])
window = QtGui.QWidget()
window.resize(400, 300)
tableView = QtGui.QTableView()
model = QtGui.QStandardItemModel(4, 2)
for row in range(0, 4):
for column in range(0, 3):
item = QtGui.QStandardItem("%s , %s"%(row, column))
model.setItem(row, column, item)
tableView.setModel(model)
selectionModel = QtGui.QItemSelectionModel(model)
tableView.setSelectionModel(selectionModel)
button = QtGui.QPushButton('Select from 0,0 to 1,2')
button.clicked.connect(clicked)
layout = QtGui.QVBoxLayout()
layout.addWidget(tableView)
layout.addWidget(button)
window.setLayout(layout)
window.show()
app.exec_()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With