【问题标题】:PyQt4 HighlightingPyQt4 高亮显示
【发布时间】:2009-09-24 14:24:48
【问题描述】:

我正在尝试在 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

【问题讨论】:

    标签: python qt4 pyqt4


    【解决方案1】:

    好吧...事实证明我并没有发疯,我只是在使用过时的 PyQt4 版本。

    有关信息,Ubuntu 9.04 附带的 PyQt4 版本是 4.4.4,但此功能似乎需要 4.5+。

    我已经升级到 PyQt4 4.6,它运行良好(加上 4.6 似乎也有一些不错的新功能)。

    【讨论】:

      【解决方案2】:

      lineColor 保存在某处(例如self.lineColor)。否则,Python 将在方法返回时丢弃该对象,format 将使用非法指针。

      【讨论】:

      • 感谢您的回复。不幸的是,这没有帮助。我相当确定 setBackground 方法应该保留对 lineColor 的引用。
      • 不,它没有:Python 将指针传递给在内部存储它的 C++ 方法。当它返回时,Python 部分被删除(这也删除了 C++ 对象),现在,setBackground() 指向一个无效的实例。
      • PS:我担心这不是问题的原因,但它仍然是一个错误。
      猜你喜欢
      • 2011-12-13
      • 2011-07-06
      • 1970-01-01
      • 2014-04-07
      • 1970-01-01
      • 1970-01-01
      • 2016-07-20
      • 2016-10-22
      • 2012-04-27
      相关资源
      最近更新 更多