删除QTextEdit内部的QTextDocument

问题描述 投票:1回答:1

我正在尝试删除QTextEdit内部的QTextDocument,但我无法这样做。我使用了QTextEdit的clear()方法,但不会清除QTextEdit区域。我也尝试通过设置QTextEdit的overwrite标志来覆盖以前的新文档,但是效果不佳。

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_())

如果您知道该怎么做,请提供帮助。谢谢

python python-3.x pyqt pyqt5
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.