Изменение цвета текста слов в QPlainTextEdit

У меня есть объект: self.textEdit = QPlainTextEdit()в коде:

dark_theme = '''
QWidget{
background-color: #dedede;
}
QPlainTextEdit{
background-color: #282c34;
font: 700 16pt \"Zen Kurenaido\";
padding: 8px;
color: #aeb4b4;
border-radius: 10px;
}'''

class Ui_application_pages(object):
def setupUi(self, application_pages):
    if not application_pages.objectName():
        application_pages.setObjectName(u"application_pages")
    application_pages.resize(1056, 657)
    self.page_1 = QWidget()
    self.page_1.setObjectName(u"page_1")
    self.page_1.setStyleSheet(dark_theme)
    self.page_1.setStyleSheet('background-color: #22252c')
    self.centrallayout = QHBoxLayout(self.page_1)
    self.centrallayout.setObjectName(u"centrallayout")

    self.textEdit = QPlainTextEdit()
    self.textEdit.setStyleSheet(dark_theme)
    self.textEdit.setObjectName(u"lineEdit")

Я хочу чтобы когда в мой текстовый редактор записывалось слово print в любом месте строки, то именно это слово меняло свой цвет, а остальные слова в строке и редакторе - нет

пример 1

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


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

Автор решения: S. Nick

Можно попробовать примерно так, как в примере ниже.

Обратите внимание, что я особо не настраивал пример и интервал между словами один пробел.

index = index + len(word) + 1

Если вам надо что-то посерьезнее - проверьте вопрос Редактор кода на PyQt5

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *


dark_theme = '''
QWidget{
    background-color: #dedede;
}
QPlainTextEdit{
    background-color: #282c34;
    font: 700 16pt \"Zen Kurenaido\";
    padding: 8px;
    color: #aeb4b4;
    border-radius: 10px;
}
'''

class Ui_application_pages(object):
    def setupUi(self, application_pages):
        if not application_pages.objectName():
            application_pages.setObjectName(u"application_pages")
        application_pages.resize(1056, 657)
        
        self.page_1 = QWidget()
        self.page_1.setObjectName(u"page_1")
        self.page_1.setStyleSheet(dark_theme)
        self.page_1.setStyleSheet('background-color: #22252c')
        self.centrallayout = QHBoxLayout(self.page_1)
        self.centrallayout.setObjectName(u"centrallayout")

        self.textEdit = QPlainTextEdit()
        self.textEdit.setStyleSheet(dark_theme)
        self.textEdit.setObjectName(u"lineEdit")


class Window(QtWidgets.QWidget, Ui_application_pages):
    def __init__(self, text):
        super().__init__()
        self.setupUi(self)
        
        self.layout = QVBoxLayout(self)
        self.layout.addWidget(self.page_1)
        
        self.textEdit.setPlainText(text) 
        self.centrallayout.addWidget(self.textEdit)

        self.format = QTextCharFormat()
        self.format.setTextOutline(QPen(QColor("green")))
        
        self.timer = QtCore.QTimer()      
        self.timer.timeout.connect(self.updateTime)
        self.timer.start(500)
        
    def updateTime(self):
        wordList = self.textEdit.toPlainText().split()
        
        index = 0        
        for word in wordList:    
            cursor = self.textEdit.textCursor()
            cursor.setPosition(index)
            ww = cursor.movePosition(QTextCursor.EndOfWord, 1)
            self.format.setTextOutline(QPen(QColor("#aeb4b4")))
            cursor.mergeCharFormat(self.format)
            if word in ['print', 'print,', 'print.', 'print(']:
                self.format.setTextOutline(QPen(QColor("green")))
                cursor.mergeCharFormat(self.format)
            else:
                self.format.setTextOutline(QPen(QColor("#aeb4b4")))
                cursor.mergeCharFormat(self.format)
                
            index = index + len(word) + 1

text = '''Функция print
Функция print Python выводит заданные объекты на стандартное устройство \
вывода (экран) или отправляет их текстовым потоком в файл.
Полный синтаксис функции print():
print( *items, sep=' ', end='\\n', file=sys.stdout, flush=False ).
Параметр file контролирует то, куда выводятся значения функции print.
По умолчанию все выводится на стандартный поток вывода - sys.stdout.
Обратите внимание на то, что все аргументы, которые управляют поведением \
функции print, надо передаватьprint как ключевые, а не позиционные.'''    


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    w = Window(text)
    w.show()
    sys.exit(app.exec_())        

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

→ Ссылка