Вопрос
Я пытаюсь добавить подсветку синтаксиса в текстовый редактор 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)
Кто-нибудь знает, почему это не работает?
Версии, которые я использую:Питон 2.6.2, PyQt 4.4.4
Решение
Хорошо...Оказывается, я не сошел с ума, я просто использовал устаревшую версию PyQt4.
Для информации, версия PyQt4, поставляемая с Ubuntu 9.04, — 4.4.4, но для этой функции требуется версия 4.5+.
Я обновился до PyQt4 4.6, и он работает нормально (плюс 4.6, похоже, также имеет некоторые хорошие новые функции).
Другие советы
Сохранять lineColor
где-то (например self.lineColor
).В противном случае Python отбросит объект при возврате метода и format
будет использовать недопустимый указатель.