如何让PyQt5中textEdit.find()的查找结果呈现深度选中高亮效果?
解决方案
你遇到的浅高亮是QTextEdit默认的临时查找匹配标记,不属于编辑器原生选中状态。要实现原生选中的深度高亮,只需要在查找匹配成功后,主动将定位到匹配位置的光标设置为编辑器的激活光标即可。
修改后的完整代码如下:
def search(self, term, case_sensitive=False): self.textedit.moveCursor(qtg.QTextCursor.Start) find_flag = qtg.QTextDocument.FindFlag(0) if case_sensitive: find_flag |= qtg.QTextDocument.FindCaseSensitively # 执行查找操作,返回是否匹配成功 found = self.textedit.find(term, find_flag) if not found: self.statusBar().showMessage('No matches Found', 2000) return # 核心逻辑:获取匹配到文本的光标对象,重新设置给textEdit触发原生选中高亮 match_cursor = self.textedit.textCursor() self.textedit.setTextCursor(match_cursor)
改动说明
- PyQt/PySide中
QTextEdit.find()返回值为布尔类型,代表是否找到匹配内容,原代码中用cur接收布尔值容易产生歧义,这里做了修正 - 查找成功后
textEdit的内部光标已经自动定位到匹配文本的范围,主动调用setTextCursor重设光标后,就会把临时查找高亮替换为原生的选中深度高亮
内容的提问来源于stack exchange,提问作者Eliazar
相关产品推荐
相关产品推荐

