首页 > 解决方案 > QTableView 搜索并突出显示项目

问题描述

如何在 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_())

标签: pythonpyqtpyqt5

解决方案


我不确定我是否理解正确,但试试看:

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_())

在此处输入图像描述


推荐阅读