Python Qt Подчеркнутый текст в QPlainTextEdit

Я сделал проверку орфографии текста, который введен в QPlainTextEdit. Проверка работает, но встал вопрос, как пометить слова не прошедшие проверку. Вот мой код. Подскажите как быть?

from PyQt5 import QtWidgets
from PyQt5.QtWidgets import *
from db.notebook_models import NotebookRubrics
from .add_rubrics import Ui_FormAddRubrics
from shutil import copyfile
import os
import pyttsx3
import speech_recognition as sr
import enchant
from PyQt5.QtGui import QFont

    # Проверка орфографии
    def spellingText(self):
        c = enchant.Dict("ru_RU")
        text = str(self.addRubrics.editTextArea.toPlainText())
        textSplit = text.split()
        for i in range(len(textSplit)):
            word = textSplit[i]
            for elm in ['?', '!', '.', ',', ':', ';']:
                word = word.replace(elm, "")
            if (c.check(word)!=True):
                text = text.replace(word, '<span style="color:#c70000;">' + word + "</span>")
        self.addRubrics.editTextArea.setPlainText(text)

Вот в text = text.replace(word, '' + word + "") я пытаюсь слово с ошибкой пометить красным (в идеале бы сделать волнистой красной линией). Затем текст заменяется в QPlainTextEdit Подскажите, как это можно сделать. Спасибо!


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

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

https://doc.qt.io/qt-5/qplaintextedit.html#appendHtml вроде можно добавить html, не вижу sethtml, но можно очистить и вставить новый фрагмент.

self.addRubrics.editTextArea.appendHtml('<span style="text-decoration-style: wavy;text-decoration: underline;text-decoration-color:red">ошибка</span> ') 
→ Ссылка
Автор решения: S. Nick

Я просто продемонстрирую пример, который демонстрирует как это может выглядеть.

Текст может быть отформатирован ограниченным способом, либо с помощью подсветки синтаксиса (syntax highlighter) (см. ниже), либо путем добавления текста в формате html с помощью appendHtml(). Хотя QPlainTextEdit не поддерживает сложный рендеринг расширенного текста с таблицами и плавающими числами, он поддерживает ограниченное форматирование на основе абзацев.

Подсветка синтаксиса QTextEdit, QPlainTextEdit работает вместе с QSyntaxHighlighter. Класс QSyntaxHighlighter позволяет вам определять правила подсветки синтаксиса, и, кроме того, вы можете использовать этот класс для запроса текущего форматирования документа или пользовательских данных.

Некоторые примеры подсветки синтаксиса вы можете посмотреть здесь Редактор кода на PyQt5 и здесь Подсветка текста караоке PyQT5

import sys
from PyQt5.Qt import *


class Template(QWidget):
    def __init__(self):
        super().__init__()

        self.editTextArea = QPlainTextEdit()

        self.editTextArea.setPlainText("""Python Qt Подчеркнутый текст в QPlainTextEdit

Я сделал проверку error орфографии текста, который введен в QPlainTextEdit. 
Проверка работает, но встал вопрос, как пометить слова не прошедшие проверку. 
Вот мой код. Подскажите errorкак быть?

Вот в text = text.replace(word, 'Errors' + word + "") я пытаюсь слово с ошибкой пометить красным 
(в идеале бы сделать волнистой красной линией). 
Затем текст заменяется в QPlainTextEdit Подскажите, как это можно сделать. Спасибо!        
Errors  """)

        fixedFont = QFontDatabase.systemFont(QFontDatabase.FixedFont)
        fixedFont.setPointSize(15)
        fixedFont.setBold(True)
        self.editTextArea.setFont(fixedFont)

        self.button  = QPushButton("Сделать проверку орфографии текста.")        
        self.button.clicked.connect(self.spellingText)

        grid = QGridLayout(self)
        grid.addWidget(self.editTextArea) 
        grid.addWidget(self.button)


    # Проверка орфографии
    def spellingText(self):
        text = str(self.editTextArea.toPlainText())
        for elm in ['?', '!', '.', ',', ':', ';']:                    # ?
            text = text.replace(elm, "")

        text = text.replace('\n', "<br>")                             # +

        errs = ['error', 'Errors', '...',]                            # какие-то слова с ошибками
        for err in errs:
            text = text.replace(err, f'<span style="color:#c70000;">{err}</span>')

        self.editTextArea.clear()                                     # + 
        self.editTextArea.appendHtml(text)                            # + appendHtml


if __name__ == '__main__':
    app = QApplication(sys.argv)

    # палитра для переключения на темные цвета:
    app.setStyle("Fusion")
    palette = QPalette()
    palette.setColor(QPalette.Window, QColor(53, 53, 53))
    palette.setColor(QPalette.WindowText, Qt.white)
    palette.setColor(QPalette.Base, QColor(25, 25, 25))
    palette.setColor(QPalette.AlternateBase, QColor(53, 53, 53))
    palette.setColor(QPalette.ToolTipBase, Qt.white)
    palette.setColor(QPalette.ToolTipText, Qt.white)
    palette.setColor(QPalette.Text, Qt.blue)                            # Qt.white
    palette.setColor(QPalette.Button, QColor(53, 53, 53))
    palette.setColor(QPalette.ButtonText, Qt.white)
    palette.setColor(QPalette.BrightText, Qt.red)
    palette.setColor(QPalette.Link, QColor(42, 130, 218))
    palette.setColor(QPalette.Highlight, QColor(42, 130, 218))
    palette.setColor(QPalette.HighlightedText, Qt.black)
    app.setPalette(palette)

    gui = Template()
    gui.resize(950, 350)
    gui.show()
    sys.exit(app.exec_())

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

→ Ссылка