Очистить данные из виджета QTextEdit/QPlainTextEdit, а не добавлять новую строку под старой строкой

Есть виджет QTextEdit/QPlainTextEdit, в котором новые данные появляются каждый раз новой строкой.

Вопрос, как осуществить замену/стирание старых данных новой строкой/строками. Как бы получается заменяем старый блок данных новым блоком данных ! Исходный код взят из ранее заданного вопроса.

from PyQt5 import QtCore, QtGui, QtWidgets
from time import sleep


class MyThread(QtCore.QThread):
    about_new_log = QtCore.pyqtSignal(str)

    def run(self):
        for i in range(1000):
            text = str(i) + '\n'

            # Посылаем сигнал
            self.about_new_log.emit(text)

            sleep(1)


class Ui_MainWindow(object):
    def __init__(self):
        self.flag = 1
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("example")
        MainWindow.resize(500, 500)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")

        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(120, 18, 200, 23))
        self.pushButton.setObjectName("Получить данные")

        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(10, 10, 10, 10))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 240, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)

        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("example", "example"))
        self.pushButton.setText(_translate("example", "Получить данные"))
        self.pushButton.clicked.connect(self.my_func)

        # Поле вывода текста
        self.plainTextEdit = QtWidgets.QPlainTextEdit()
        self.plainTextEdit.setObjectName("plainTextEdit")
        self.plainTextEdit.setObjectName("centralwidget2")
        self.plainTextEdit = QtWidgets.QPlainTextEdit(self.centralwidget)
        self.plainTextEdit.setGeometry(QtCore.QRect(60, 160, 350, 250))

        self.thread = MyThread()
        # Подключаем сигнал потока к методу plainTextEdit
        self.thread.about_new_log.connect(self.plainTextEdit.insertPlainText)

    def my_func(self):  #  Функция имитирует получение динамических данных. Данных приходит много и с задержкой.
        # Запускаем поток
        self.thread.start()

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

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

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

void QPlainTextEdit::setPlainText(const QString &text)

Изменяет текст редактирования текста на текст строки. Любой предыдущий текст удаляется.

text интерпретируется как обычный текст.

Больше https://doc.qt.io/qt-5/qplaintextedit.html#setPlainText


Не изменяйте код, сгенерированный Qt Designer. Создайте другой класс, который наследуется от соответствующего виджета, и используйте созданный класс для его заполнения.

from PyQt5 import QtCore, QtGui, QtWidgets
#from time import sleep


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("example")
        MainWindow.resize(500, 500)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")

        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(120, 18, 200, 23))
        self.pushButton.setObjectName("Получить данные")

        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(10, 10, 10, 10))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 240, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)

        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("example", "example"))
        self.pushButton.setText(_translate("example", "Получить данные"))
        self.pushButton.clicked.connect(self.my_func)


class MyThread(QtCore.QThread):
    about_new_log = QtCore.pyqtSignal(str)

    def run(self):
        for i in range(1000):
            text = str(i) + '\n'
            # Посылаем сигнал
            self.about_new_log.emit(text)
            self.msleep(1000)                                                   # !!!


class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        # Поле вывода текста
        self.plainTextEdit = QtWidgets.QPlainTextEdit()
        self.plainTextEdit.setObjectName("plainTextEdit")
        self.plainTextEdit = QtWidgets.QPlainTextEdit(self.centralwidget)
        
        layout = QtWidgets.QGridLayout(self.centralwidget)
        layout.setContentsMargins(0, 0, 0, 0)
        layout.addWidget(self.plainTextEdit)
        layout.addWidget(self.pushButton)

        self.thread = MyThread()
        # Подключаем сигнал потока к методу plainTextEdit
#        self.thread.about_new_log.connect(self.plainTextEdit.insertPlainText)
        self.thread.about_new_log.connect(self.plainTextEdit.setPlainText)            # +++

    def my_func(self):  
        # Запускаем поток
        self.thread.start()   
        

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    app.setFont(QtGui.QFont("Times", 18, QtGui.QFont.Bold))
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

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

→ Ссылка
Автор решения: AniCho

Если нужно просто очистить все текстовое поле, то проще использовать .clear(). Применяется также и к др. похожим виджетам.

А если нужно заменить весь текст, то проще сразу задать .setPlainText() (без предварительной очистки). Добавляется к соответствующему виджету.

text=QPlainTextEdit()
text.clear()
#Или замена:
text.setPlainText('текст')
→ Ссылка