PyQt5 过滤数据框
PyQt5 Filtered Dataframe
感谢您花时间帮助我。我有一个非常接近我想要的示例,但我无法让它执行完全匹配过滤器。在下面的示例中,如果您在行编辑中输入 "A",您将获得多次匹配。我希望用户必须 "Apple" 才能作为整个字符串匹配进行归档。我的真实代码中的问题是我有 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_()
如果您想要精确匹配,可以使用正则表达式定界符来确保只比较精确的字符串:
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)
^
符号表示匹配必须在字符串的 开头 ,而 $
确保匹配也将具有在结尾。
感谢您花时间帮助我。我有一个非常接近我想要的示例,但我无法让它执行完全匹配过滤器。在下面的示例中,如果您在行编辑中输入 "A",您将获得多次匹配。我希望用户必须 "Apple" 才能作为整个字符串匹配进行归档。我的真实代码中的问题是我有 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_()
如果您想要精确匹配,可以使用正则表达式定界符来确保只比较精确的字符串:
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)
^
符号表示匹配必须在字符串的 开头 ,而 $
确保匹配也将具有在结尾。