Как динамически отображать формат текста или открытого текста на основе курсора пользователя - PullRequest
0 голосов
/ 23 апреля 2020

Моя цель - создать простой редактор уценок, используя PySide2 . При редактировании я хочу, чтобы строка, которую редактирует пользователь, отображалась как обычный текст , а остальная часть документа как отображала уценку (т.е. форматированный текст) . Я новичок в Qt и все еще изучаю его внутреннюю работу.

Итак, вот что я попробовал. Я расширил QTextEdit в своем собственном QMarkdownEdit и добавил функциональность, чтобы виджет выделял любой блок, на котором находится пользователь. Я не нашел способа выделить всю строку, а не только блок, но я над этим работаю. Я думал о том, чтобы попытаться сделать это, перегрузив paintEvent() вместо того, чтобы основываться на событии курсора, но пока не удосужился попробовать это. Исходный код моего QMarkdownEdit приведен ниже.

"""
    Extension of QTextEdit to dynamically display plaintext or html depending on which
    line the user is editing
"""
import sys
from PySide2.QtWidgets import (QApplication, QMainWindow, QPlainTextEdit, QTextEdit)
from PySide2.QtGui import (Qt, QTextFormat, QTextBlockFormat, QTextCharFormat, QTextCursor, QColor,
                           QTextDocument, QPainter)
from PySide2.QtCore import (QIODevice, QFile, QTextStream)

class QMarkdownEdit(QTextEdit):
    def __init__(self, parent):
        super().__init__(parent)
        self.lineNum = -1
        self.cursorPositionChanged.connect(self.__highlight_line)
        self.__highlight_line()


    def __highlight_line(self):
        selections = []
        if not self.isReadOnly():

            selection = QTextEdit.ExtraSelection()
            selection.format.setBackground(QColor(200, 200, 200))
            selection.format.setProperty(QTextFormat.FullWidthSelection, True)
            selection.cursor = self.textCursor()
            selection.cursor.clearSelection()
            selections.append(selection)

        self.setExtraSelections(selections)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = QMainWindow()
    edit = QMarkdownEdit(window)
    window.setCentralWidget(edit)
    window.show()

    app.exec_()


Любая помощь приветствуется. Я обновлюсь, если выясню что-нибудь самостоятельно.

...