如何选择 QTextBrowser 中的所有匹配项

Posted

技术标签:

【中文标题】如何选择 QTextBrowser 中的所有匹配项【英文标题】:How to select all the occurrences in QTextBrowser 【发布时间】:2017-01-19 19:56:43 【问题描述】:

代码创建了QTextBrowser 窗口,其中填充了文本行。 我想选择所有匹配“长线”的词 如何实现?

from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])

view = QtGui.QTextBrowser() 
for i in range(25):
    view.append(10*('Long Line of text # %004d '%i) )
view.setLineWrapMode(0)

view.find('Long Line')

view.show()
app.exec_()

【问题讨论】:

【参考方案1】:

您可以使用QTextEdit.setExtraSelections:

import sys
from PyQt4.QtGui import (QApplication, QTextEdit, QTextBrowser, QTextCursor,
                         QTextCharFormat, QPalette)

app = QApplication(sys.argv)
view = QTextBrowser()
for i in range(25):
    view.append(10*('Long Line of text # %004d '%i) )
view.setLineWrapMode(0)
line_to_find = 'Long Line'

# get default selection format from view's palette
palette = view.palette()
text_format = QTextCharFormat()
text_format.setBackground(palette.brush(QPalette.Normal, QPalette.Highlight))
text_format.setForeground(palette.brush(QPalette.Normal, QPalette.HighlightedText))

# find all occurrences of the text
doc = view.document()
cur = QTextCursor()
selections = []
while 1:
    cur = doc.find(line_to_find, cur)
    if cur.isNull():
        break
    sel = QTextEdit.ExtraSelection()
    sel.cursor = cur
    sel.format = text_format
    selections.append(sel)
view.setExtraSelections(selections)

view.show()
app.exec_()

结果如下:

或者尝试QSyntaxHighlighter

【讨论】:

以上是关于如何选择 QTextBrowser 中的所有匹配项的主要内容,如果未能解决你的问题,请参考以下文章

Qt 5,为 QTabWidget 中的每个 QTextBrowser 撤消/重做

单击其中的链接后,QTextBrowser 中的 PySide/PyQt 文本消失

如何删除 QTextBrowser 中的虚线轮廓链接?

QTextBrowser 显示带有多余空格的嵌套 HTML 列表

如何将 QTextBrowser(其中包含 html 表)的光标移动到 PyQt5 中的特定行?

在 QTextBrowser 中选择文本