Удалить QTextDocument, который находится внутри QTextEdit - PullRequest
1 голос
/ 29 января 2020

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

def create_doc(body_text):
    doc = QTextDocument()
    doc.setDocumentMargin(10)

    cursor = QTextCursor(doc)
    cursor.movePosition(QTextCursor.Start)

    block_fmt = QTextBlockFormat()
    block_fmt.setBottomMargin(6)
    block_fmt.setAlignment(QtCore.Qt.AlignJustify)

    para_fmt = QTextCharFormat()
    para_fmt.setFontWeight(QFont.Normal)
    para_fmt.setFontPointSize(12)
    para_fmt.setFontFamilies(["Raleway", "Arial"])

    cursor.insertBlock(block_fmt)
    cursor.insertText(body_text, para_fmt)
    cursor.movePosition(QTextCursor.End)

    return doc


class AppUI(QtWidgets.QMainWindow):

    def __init__(self):
        super(AppUI, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.qTextEditArea.setOverwriteMode(True)
        self.ui.button.clicked.connect(lambda : self.add_text("some text")

    def add_text(self, text):
        self.ui.qTextEditArea.clear()
        document = create_doc(doc)
        self.ui.qTextEditArea.setDocument(document)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    ui = AppUI()
    ui.show()
    sys.exit(app.exec_())

Если вы знаете, как это сделать, пожалуйста, помогите. Спасибо

1 Ответ

1 голос
/ 29 января 2020

Класс QTextEdit

document: QTextDocument *

Это свойство содержит базовый документ текстового редактора.

Примечание. редактор не становится владельцем документа, если он не является родительским объектом документа. Родительский объект предоставленного документа остается владельцем объекта. Если ранее назначенный документ является дочерним для редактора, он будет удален.

Функции доступа:

QTextDocument * document () const

void setDocument (QTextDocument * document )

main.py

import sys
from PyQt5.Qt import *
from textEditArea import Ui_MainWindow


def create_doc(body_text):
    doc = QTextDocument()
    doc.setDocumentMargin(10)

    cursor = QTextCursor(doc)
    cursor.movePosition(QTextCursor.Start)

    block_fmt = QTextBlockFormat()
    block_fmt.setBottomMargin(6)
    block_fmt.setAlignment(Qt.AlignJustify)

    para_fmt = QTextCharFormat()
    para_fmt.setFontWeight(QFont.Normal)
    para_fmt.setFontPointSize(12)

    para_fmt.setFontFamilies(["Raleway", "Arial"])  # This function was introduced in Qt 5.13.

    cursor.insertBlock(block_fmt)
    cursor.insertText(body_text, para_fmt)
    cursor.movePosition(QTextCursor.End)

    return doc


class AppUI(QMainWindow):

    def __init__(self):
        super(AppUI, self).__init__()

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

#        self.ui.qTextEditArea.setOverwriteMode(True)

        self.ui.button.clicked.connect(lambda : self.add_text("some text"))   

    def add_text(self, text):
#        self.ui.qTextEditArea.clear()
#        document = create_doc(doc)                      # ??? (doc)
        document = create_doc(text)                      # +++ text   
        self.ui.qTextEditArea.setDocument(document)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    ui = AppUI()
    ui.show()
    sys.exit(app.exec_())

textEditArea.py

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(456, 304)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.qTextEditArea = QtWidgets.QTextEdit(self.centralwidget)
        self.qTextEditArea.setObjectName("qTextEditArea")
        self.gridLayout.addWidget(self.qTextEditArea, 0, 0, 1, 1)
        self.button = QtWidgets.QPushButton(self.centralwidget)
        self.button.setObjectName("button")
        self.gridLayout.addWidget(self.button, 1, 0, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 456, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.button.setText(_translate("MainWindow", "PushButton"))

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...