How to create a filter for QTableWidget?

前端 未结 1 606
栀梦
栀梦 2020-12-10 07:35

I\'m trying to create a filter for QTableWidget with QLineEdit in PySide. I\'ve seen some tutorials using QSortFilterProxyModel for C+

相关标签:
1条回答
  • 2020-12-10 08:22

    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'])
    for row, 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)
    
    # table view
    table = 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:

    0 讨论(0)
提交回复
热议问题