2009-09-24 4 views
2

Я пытаюсь добавить подсветку синтаксиса в текстовый редактор в PyQt4. Я нашел пример в документации, которая работает при компиляции из C++, но когда я конвертирую ее в Python/PyQt, она больше не работает.PyQt4 Подсветка

Часть кода, который не выходит из строя (больше не выделяет ничего) является:

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) 

Кто-нибудь есть какие-либо идеи, почему это не работает?

Версии я usuing являются: Python 2.6.2, PyQt 4.4.4

ответ

1

Ок ... получается, что я не сошел с ума, я просто использовал устаревшую версию PyQt4.

Для информации версия PyQt4, которая поставляется с Ubuntu 9.04, составляет 4.4.4, но для этой функции требуется 4.5+.

Я обновился до PyQt4 4.6, и он отлично работает (плюс 4.6, похоже, имеет некоторые новые новые функции).

0

Сохранить lineColor где-то (как self.lineColor). В противном случае Python отбросит объект, когда метод вернется, и format будет использовать незаконный указатель.

+0

Благодарю вас за ответ. К сожалению, это не помогло. Я уверен, что метод setBackground должен содержать ссылку на lineColor. – JonahSan

+0

Нет, это не так: Python передает указатель на метод C++, который хранит его внутри. Когда он возвращает часть Python, удаляется (также удаляет объект C++), и теперь setBackground() указывает на недопустимый экземпляр. –

+0

PS: Я боялся, что это не причина проблемы, но это ошибка, тем не менее. –

Смежные вопросы