python - 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_())
解决方案
我不确定我是否理解正确,但试试看:
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_())
推荐阅读
- javascript - 如何覆盖单个选择元素中的默认事件侦听器以使其表现得像倍数?
- java - 如何在 Java 中编码没有 HTML 实体的特殊 HTML 字符
- excel - 仅在满足条件时才选中所有复选框
- android - Android Studio 请检查我一直在努力寻找在 kotlin 中视频视图为空的解决方案
- ios - 将数据从 SwiftUI 传递到 UIKit 的回调
- python - 在多轴图中旋转 xtick 标签
- android - android上的同一个数据库是否可以有多个文件dao?
- angular - Angular mat-datepicker 页面更改事件
- sharepoint-online - kw 搜索上的 SharePoint 不熟悉错误:SubstrateSearchException: Remote executors failed
- python - 通过python中的beautifulsoup从yahoofinance中提取表数据