【问题标题】:PyQt4 filter by text on a QListView using setRowHiddenPyQt4 使用 setRowHidden 在 QListView 上按文本过滤
【发布时间】:2017-04-27 20:57:43
【问题描述】:

我有一个如下所示的对话框:

该对话框有以下代码连接到过滤器按钮:

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)

但是,当我单击“过滤器”时,没有任何反应。我错过了什么?

【问题讨论】:

    标签: python pyqt pyqt4 qlineedit qlistview


    【解决方案1】:

    问题是您隐藏了错误的项目。我已经展示了一个示例来展示解决方案。

    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)
    

    【讨论】:

    • 感谢 Eyllanesc 这段代码解决了我最大的问题...
    猜你喜欢
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    • 2021-10-02
    相关资源
    最近更新 更多