Можно ли каким-либо способом изменить цвет отдельного слова в QTextEdit?

Например в многих IDE есть подсветка синтаксиса (у разных слов разный цвет).

Можно ли это реализовать без использования модуля QScintilla? Дайте наводку хотя бы.


Ответы (2 шт):

Автор решения: n1tr0xs

Отдельный участок текста в QTextEdit нельзя изменить стандартными Qt средствами.

→ Ссылка
Автор решения: S. Nick

Конечно можно, сделайте по любому слову двойной клик:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets

class TextBrowser(QtWidgets.QTextEdit):            
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    def mouseDoubleClickEvent(self, e):
        fmt = QtGui.QTextCharFormat()
        fmt.setFont(QtGui.QFont("Times", 12, QtGui.QFont.Bold))
        fmt.setTextOutline(QtGui.QPen(QtGui.QColor("red")))
        self.mergeCurrentCharFormat(fmt)     
        cursor = self.textCursor()                   

        if not cursor.hasSelection(): 
            cursor.select(cursor.WordUnderCursor)

        cursor.mergeCharFormat(fmt)
        self.mergeCurrentCharFormat(fmt)
        cursor.clearSelection() 
        cursor.movePosition(QtGui.QTextCursor.EndOfWord)
        self.setTextCursor(cursor)      
        super().mouseDoubleClickEvent(e)


class Widget(QtWidgets.QWidget):
    def __init__(self):
        super(Widget,self).__init__()

        self.textBrowser = TextBrowser() 
        self.textBrowser.setPlainText("""
Можно ли каким-либо способом изменить цвет отдельного слова в QTextEdit?

Например в многих IDE есть подсветка синтаксиса (у разных слов разный цвет). 
Можно ли это реализовать без использования модуля QScintilla? Дайте наводку хотя бы.  

    МОЖНО !!!     
        """)
        layout = QtWidgets.QVBoxLayout()
        layout.addWidget(self.textBrowser)
        self.setLayout(layout)
        cursor = self.textBrowser.textCursor()
        cursor.clearSelection()
        self.textBrowser.setTextCursor(cursor)        


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    myWin = Widget()
    myWin.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка