如何在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_())
我不知道我对你的理解是否正确,但可以试试。
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_())