Skip to content Skip to sidebar Skip to footer

How To Create A Filter For Qtablewidget?

I'm trying to create a filter for QTableWidget with QLineEdit in PySide. I've seen some tutorials using QSortFilterProxyModel for C++ but couldn't understood how to do it in Python

Solution 1:

A QSortFilterProxyModel is a proxy model, that means that you put it between the your complete data model and a view. The comment by titusjan is good, you can look in your local PySide/PyQt installation for basicsortfiltermodel.py to get an example in Python.

Also, instead of using a QTableWidget a QTableView is sufficient - you won't need the inbuilt model of QTableWidget anyway.

QTableWidget:Details

The QTableWidget class provides an item-based table view with a default model.

Table widgets provide standard table display facilities for applications. The items in a QTableWidget are provided by QTableWidgetItem.

If you want a table that uses your own data model you should use QTableView rather than this class.

I compiled an very simple example demonstrating filtering for the third column of a QTableView:

from PySide import QtCore, QtGui

app = QtGui.QApplication([])
window= QtGui.QWidget()

# standard item model
model = QtGui.QStandardItemModel(5, 3)
model.setHorizontalHeaderLabels(['ID', 'DATE', 'VALUE'])
forrow, text in enumerate(['Cell', 'Fish', 'Apple', 'Ananas', 'Mango']):
    item = QtGui.QStandardItem(text)
    model.setItem(row, 2, item)

# filter proxy model
filter_proxy_model = QtGui.QSortFilterProxyModel()
filter_proxy_model.setSourceModel(model)
filter_proxy_model.setFilterKeyColumn(2) # third column

# line edit for filtering
layout = QtGui.QVBoxLayout(window)
line_edit = QtGui.QLineEdit()
line_edit.textChanged.connect(filter_proxy_model.setFilterRegExp)
layout.addWidget(line_edit)

# tableviewtable= QtGui.QTableView()
table.setModel(filter_proxy_model)
layout.addWidget(table)

window.show()
app.exec_()

You have a QStandardItemModel which is set as source of a QSortFilterProxyModel which uses the third column for filtering and uses the input of a QLineEdit as filtering expression. The QSortFilterProxyModel is used as model by a QTableView.

And it looks like:

No filtering

Filtering

Post a Comment for "How To Create A Filter For Qtablewidget?"