PyQt4 4.4.4 : a bug with highlightBlock ?

David Boddie david at boddie.org.uk
Fri Nov 20 00:55:51 CET 2009


On Wednesday 18 November 2009 11:47, Snouffy wrote:

> I've been trying to do some syntax highlighting using PyQt4. I ported
> the example given in the documentation of Qt4 to Python. It works fine
> on my computer at work (which has PyQt4 version 4.3.3) but doesn't on
> my home computer (which has version 4.4.4) : it gets stuck in an
> infinite loop.

This is a known issue. There are examples distributed with PyQt that should
have been updated to use a slightly different approach.

> Here is the code :
> 
> class MyHighlighter(QtGui.QSyntaxHighlighter):
>     def __init__(self, edit):
>         QtGui.QSyntaxHighlighter.__init__(self,edit)
> 
>     def highlightBlock(self, text):
>         myClassFormat = QtGui.QTextCharFormat()
>         myClassFormat.setFontWeight(QtGui.QFont.Bold)
>         myClassFormat.setForeground(QtCore.Qt.darkMagenta)
>         pattern = "\\b[A-Z_]+\\b"
> 
>         expression = QtCore.QRegExp(pattern)
>         index = text.indexOf(expression);
>         while (index >= 0):
>             length = expression.matchedLength()
>             self.setFormat(index, length, myClassFormat)
>             index = text.indexOf(expression, index + length)

You need to change the indexOf() calls to indexIn() calls on the QRegExp
object:

  index = expression.indexIn(text, index + length)

> What am I missing ? Is this a known bug of version 4.4.4 ?

I think there was a behavioural change at some point that affected regular
expression searching in QStrings.

David



More information about the Python-list mailing list