我正在尝试在PySide中为QTableWidget
创建一个过滤器QLineEdit
。我已经看过一些使用QSortFilterProxyModel
用于C ++的教程但无法理解如何在Python中使用它。
我需要搜索'VALUE'列。
答案 0 :(得分:6)
QSortFilterProxyModel
是代理模型,这意味着您将它放在完整的数据模型和视图之间。 titusjan的评论很好,您可以在本地PySide / PyQt安装中查找basicsortfiltermodel.py
以获取Python中的示例。
此外,代替使用QTableWidget
QTableView
就足够了 - 无论如何你都不需要QTableWidget
的内置模型。
QTableWidget类提供了一个带有默认模型的基于项目的表视图。
表小部件为应用程序提供标准表显示工具。 QTableWidget中的项目由QTableWidgetItem提供。
如果你想要一个使用你自己的数据模型的表,你应该使用QTableView而不是这个类。
我编译了一个非常简单的示例,演示了对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_()
您有一个QStandardItemModel
被设置为QSortFilterProxyModel
的来源,它使用第三列进行过滤,并使用QLineEdit
的输入作为过滤表达式。 QSortFilterProxyModel
将QTableView
用作模型。
它看起来像: