如何在pyqt中获得可搜索的Qlistview

时间:2017-02-21 03:35:28

标签: python pyqt

我有一个QListView,它在 Python 中使用PyQt显示项目列表。如何在搜索时返回qlistview特定项目?

例如,如果我有以下Qlistview有4个项目,我怎样才能获得包含text = dan的项目?或将其带到列表的顶部。此外,搜索不需要完全具体,如果我输入“da”我想要它返回dan或以“da”开头并可能将它带到列表顶部的项目

QListWidget

我的Qlistview定义如下:

from PyQt4 import QtCore, QtGui
import os
import sys

class AppView(QtGui.QDialog):

    def __init__(self, parent=None):
        super(AppView, self).__init__(parent)
        self.resize(400, 400)
        self.ShowItemsList()

    def ShowItemsList(self):
        self.setWindowTitle("List")
        buttonBox = QtGui.QDialogButtonBox(self)
        buttonBox.setOrientation(QtCore.Qt.Horizontal)
        buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Ok)
        listview = QtGui.QListView(self)

        verticalLayout = QtGui.QVBoxLayout(self)
        verticalLayout.addWidget(listview)
        verticalLayout.addWidget(buttonBox)
        buttonBox.accepted.connect(self.close)
        model = QtGui.QStandardItemModel(listview)
        with open("names-list.txt") as input:
            if input is not None:
                item = input.readlines()
            for line in item:
                item = QtGui.QStandardItem(line)
                item.setCheckable(True)
                item.setCheckState(QtCore.Qt.PartiallyChecked)
                model.appendRow(item)

        listview.setModel(model)
        listview.show()

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    view = AppView()
    view.show()
    sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:0)

我这样修好了。我使我的模型成为一个以self开头的实例变量,以便我可以从另一个函数访问它。

def searchItem(self):
    search_string = self.searchEditText.text() # Created a QlineEdit to input search strings
    items = self.model.findItems(search_string, QtCore.Qt.MatchStartsWith)
    if len(items) > 0:
        for item in items:
            if search_string:
                self.model.takeRow(item.row()) #take row of item
                self.model.insertRow(0, item)  # and bring it to the top
    else:
        print "not found"
相关问题