PyQt4 使用 setRowHidden 在 QListView 上按文本过滤
PyQt4 filter by text on a QListView using setRowHidden
我有一个如下所示的对话框:
该对话框将以下代码连接到过滤器按钮:
class Dialog(QtGui.QDialog, addWin.Ui_Dialog):
...
self.list = QListView()
self.filter.clicked.connect(self.filterClicked)
...
def filterClicked(self):
filter_text = str(self.lineEdit.text()).lower()
for row in range(self.model.rowCount()):
if filter_text in str(self.model.item(row).text()).lower():
self.list.setRowHidden(row, True)
else:
self.list.setRowHidden(row, False)
但是,当我单击 "Filter" 时,没有任何反应。我错过了什么?
问题是您隐藏了错误的项目。我已经展示了一个例子来展示解决方案。
class Dialog(QDialog):
def __init__(self, parent=None):
super(Dialog, self).__init__(parent=parent)
vLayout = QVBoxLayout(self)
hLayout = QHBoxLayout()
self.lineEdit = QLineEdit(self)
hLayout.addWidget(self.lineEdit)
self.filter = QPushButton("filter", self)
hLayout.addWidget(self.filter)
self.filter.clicked.connect(self.filterClicked)
self.list = QListView(self)
vLayout.addLayout(hLayout)
vLayout.addWidget(self.list)
self.model = QStandardItemModel(self.list)
codes = [
'LOAA-05379',
'LOAA-04468',
'LOAA-03553',
'LOAA-02642',
'LOAA-05731'
]
for code in codes:
item = QStandardItem(code)
item.setCheckable(True)
self.model.appendRow(item)
self.list.setModel(self.model)
def filterClicked(self):
filter_text = str(self.lineEdit.text()).lower()
for row in range(self.model.rowCount()):
if filter_text in str(self.model.item(row).text()).lower():
self.list.setRowHidden(row, False)
else:
self.list.setRowHidden(row, True)
我有一个如下所示的对话框:
该对话框将以下代码连接到过滤器按钮:
class Dialog(QtGui.QDialog, addWin.Ui_Dialog):
...
self.list = QListView()
self.filter.clicked.connect(self.filterClicked)
...
def filterClicked(self):
filter_text = str(self.lineEdit.text()).lower()
for row in range(self.model.rowCount()):
if filter_text in str(self.model.item(row).text()).lower():
self.list.setRowHidden(row, True)
else:
self.list.setRowHidden(row, False)
但是,当我单击 "Filter" 时,没有任何反应。我错过了什么?
问题是您隐藏了错误的项目。我已经展示了一个例子来展示解决方案。
class Dialog(QDialog):
def __init__(self, parent=None):
super(Dialog, self).__init__(parent=parent)
vLayout = QVBoxLayout(self)
hLayout = QHBoxLayout()
self.lineEdit = QLineEdit(self)
hLayout.addWidget(self.lineEdit)
self.filter = QPushButton("filter", self)
hLayout.addWidget(self.filter)
self.filter.clicked.connect(self.filterClicked)
self.list = QListView(self)
vLayout.addLayout(hLayout)
vLayout.addWidget(self.list)
self.model = QStandardItemModel(self.list)
codes = [
'LOAA-05379',
'LOAA-04468',
'LOAA-03553',
'LOAA-02642',
'LOAA-05731'
]
for code in codes:
item = QStandardItem(code)
item.setCheckable(True)
self.model.appendRow(item)
self.list.setModel(self.model)
def filterClicked(self):
filter_text = str(self.lineEdit.text()).lower()
for row in range(self.model.rowCount()):
if filter_text in str(self.model.item(row).text()).lower():
self.list.setRowHidden(row, False)
else:
self.list.setRowHidden(row, True)