Python PyQt5过滤数据帧

Python PyQt5过滤数据帧,python,model,pyqt5,qtableview,Python,Model,Pyqt5,Qtableview,谢谢你抽出时间来帮助我。我有一个非常接近我想要的例子,但我无法让它做一个精确的匹配过滤器。在下面的示例中,如果您在“行编辑”中键入A,您将获得多个点击。我希望用户必须有苹果文件作为整个字符串匹配。我实际代码中的问题是我有CM和CMI,我希望过滤器只显示一个 from PySide import QtCore, QtGui app = QtGui.QApplication([]) window = QtGui.QWidget() # standard item model model = Qt

谢谢你抽出时间来帮助我。我有一个非常接近我想要的例子,但我无法让它做一个精确的匹配过滤器。在下面的示例中,如果您在“行编辑”中键入A,您将获得多个点击。我希望用户必须有苹果文件作为整个字符串匹配。我实际代码中的问题是我有CM和CMI,我希望过滤器只显示一个

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_()

如果需要精确匹配,可以使用regexp定界器确保只比较精确的字符串:

def fullFilter(text):
    filter_proxy_model.setFilterRegExp('^{}$'.format(text))

line_edit.textChanged.connect(fullFilter)
# to ignore case sensitivity (matching "apple", "aPpLe", etc.):
filter_proxy_model.setFilterCaseSensitivity(False)

^符号表示匹配必须在字符串的开头,而$则确保匹配也必须在字符串的结尾。

您的意思是要检查是否只有确切的单词匹配,以便如果用户开始键入Apple,则在键入结束之前,表将为空?最好是精确匹配。