Search code examples
pythonqtpyqtqtableviewqabstracttablemodel

How to control sorting arrow indicator on QTableView


enter image description here

When this QTableView is created I want the sorting "arrow" indicator to be shown on the column at the middle. The arrow needs to be pointing down. How to achieve this?

from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])

class Model(QtCore.QAbstractTableModel):
    def __init__(self):
        QtCore.QAbstractTableModel.__init__(self)
        self.items = [[1, 'one', 'ONE'], [2, 'two', 'TWO'], [3, 'three', 'THREE']]

    def rowCount(self, parent=QtCore.QModelIndex()):
        return 3 
    def columnCount(self, parent=QtCore.QModelIndex()):
        return 3

    def data(self, index, role):
        if not index.isValid(): return 

        if role == QtCore.Qt.DisplayRole:
            return self.items[index.row()][index.column()]

tableModel=Model()
tableView=QtGui.QTableView() 
tableView.setModel(tableModel)
tableView.setSortingEnabled(True)

tableView.show()
app.exec_()

Solution

  • You have to use the sortByColumn function, using Descending Order to make the arrow be "pointing down":

    tableView.sortByColumn(1, QtCore.Qt.DescendingOrder)