QTableView搜索和高亮显示项目

问题描述 投票:0回答:1

如何在QtableView中搜索并高亮显示一个项目。我做了一个基本的搜索和高亮,但当我清除文本高亮仍然存在,并移动到另一个项目,问题是当清除文本,它不删除高亮。请你告诉我如何解决这个问题。

from PyQt5 import QtWidgets, QtCore, QtGui
import sys


Mylist   = ['Apple','Orange','lemon']

class Window(QtWidgets.QWidget):
    def __init__(self, mylist):
        super(Window, self).__init__()

        # mylist
        self.mylist = mylist

        # layout
        Layout = QtWidgets.QVBoxLayout(self)

        # Model and listview
        self.viewL = QtWidgets.QTableView()
        self.model = QtGui.QStandardItemModel()

        # Add items
        for Name in self.mylist:
            item = QtGui.QStandardItem(Name)
            item.setCheckable(True)
            item.setCheckState(QtCore.Qt.Unchecked)
            self.model.appendRow(item)

        # set the model
        self.viewL.setModel(self.model)

        # 
        search = QtWidgets.QLineEdit()
        search.textChanged.connect(self.myfilter)
        #
        Layout.addWidget(search)
        Layout.addWidget(self.viewL)

        self.show()

    def myfilter(self, text, column=0):

        start = self.model.index(0, column)
        matches = self.model.match(
            start, QtCore.Qt.DisplayRole,
            text, 1, QtCore.Qt.MatchContains)
        if matches:
            index = matches[0]
            # index.row(), index.column()
            self.viewL.selectionModel().select(
                index, QtCore.QItemSelectionModel.Select)



app=QtWidgets.QApplication(sys.argv)
window=Window(mylist=Mylist)
sys.exit(app.exec_())
python pyqt pyqt5
1个回答
0
投票

我不知道我对你的理解是否正确,但可以试试。

from PyQt5 import QtWidgets, QtCore, QtGui
import sys


Mylist   = ['Apple','Orange','lemon']

class Window(QtWidgets.QWidget):
    def __init__(self, mylist):
        super(Window, self).__init__()

        # mylist
        self.mylist = mylist

        # layout
        Layout = QtWidgets.QVBoxLayout(self)

        # Model and listview
        self.viewL = QtWidgets.QTableView()
        self.model = QtGui.QStandardItemModel()

        # Add items
        for Name in self.mylist:
            item = QtGui.QStandardItem(Name)
            item.setCheckable(True)
            item.setCheckState(QtCore.Qt.Unchecked)
            self.model.appendRow(item)

        # set the model
        self.viewL.setModel(self.model)

        # 
        search = QtWidgets.QLineEdit()
        search.textChanged.connect(self.myfilter)
        #
        Layout.addWidget(search)
        Layout.addWidget(self.viewL)

        self.show()

    def myfilter(self, text, column=0):
        self.viewL.clearSelection()                                     # +++
        if text:                                                        # +++
            start = self.model.index(0, column)
            matches = self.model.match(
                start, 
                QtCore.Qt.DisplayRole,
                text, 
                hits=1, 
                flags=QtCore.Qt.MatchContains
            )
            if matches:
                index = matches[0]
                # index.row(), index.column()
                self.viewL.selectionModel().select(
                    index, QtCore.QItemSelectionModel.Select)


app=QtWidgets.QApplication(sys.argv)
window=Window(mylist=Mylist)
sys.exit(app.exec_())

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.