Search code examples
pythonpyqtqtextbrowser

How to select all the occurrences in QTextBrowser


The code creates QTextBrowser window filled with the lines of text. I would like to select all the words matching "Long Line" How to achieve it?

enter image description here

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

Solution

  • You can use 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_()
    

    And here is the result:

    the QTextBrowser on win7

    Alternatively try QSyntaxHighlighter.