PyQt4 高亮显示

2 投票
2 回答
1897 浏览
提问于 2025-04-15 14:34

我正在尝试在PyQt4的文本编辑器中添加一些语法高亮功能。我在文档中找到了一个示例,这个示例在用C++编译时可以正常工作,但当我把它转换成Python/PyQt时,它就不再有效了。

出问题的代码部分(不再高亮任何内容)是:

def highlightCurrentLine(self):

    extraSelections = []

    if not self.isReadOnly():
        selection = QTextEdit.ExtraSelection()

        lineColor = QColor(Qt.yellow).lighter(160)

        selection.format.setBackground(lineColor)
        selection.format.setProperty(QTextFormat.FullWidthSelection, QVariant(True))
        selection.cursor = self.textCursor()
        selection.cursor.clearSelection()
        extraSelections.append(selection)

    self.setExtraSelections(extraSelections)

这个部分是通过以下代码调用的:

self.connect(self, SIGNAL('cursorPositionChanged()'), self.highlightCurrentLine)

有没有人知道为什么这不管用了?

我使用的版本是:Python 2.6.2,PyQt 4.4.4

2 个回答

0

lineColor 存储到某个地方(比如 self.lineColor)。否则,当这个方法结束时,Python 会把这个对象丢掉,这样 format 就会使用一个不合法的指针。

1

好的... 结果证明我没有发疯,我只是用的PyQt4的旧版本。

顺便说一下,Ubuntu 9.04自带的PyQt4版本是4.4.4,但这个功能似乎需要4.5以上的版本。

我把PyQt4升级到了4.6,现在一切正常(而且4.6似乎还有一些不错的新功能)。

撰写回答