我试图为创建一个过滤器QTableWidget
与QLineEdit
在PySide.我已经看过一些QSortFilterProxyModel
用于C++的教程但无法理解如何在Python中使用它.
我需要搜索'VALUE'列.
A QSortFilterProxyModel
是代理模型,这意味着您将它放在完整的数据模型和视图之间.titusjan的评论很好,您可以在本地PySide/PyQt安装中查看basicsortfiltermodel.py
以获取Python中的示例.
此外,而是采用了QTableWidget
一个QTableView
就足够了-你不需要的内置模式QTableWidget
反正.
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
被设置为a的源,QSortFilterProxyModel
它使用第三列进行过滤,并使用QLineEdit
as过滤表达式的输入.将QSortFilterProxyModel
被用作由模型QTableView
.
它看起来像: