Вывод текста на форму с потока с помощью сигналов

Нужна помощь в следующей задаче:

Есть главное окно MainWindow и есть отдельный класс потока в котором есть текст. Подскажите как с помощью сигналов на форму plainTextEdit которая находится на главной форме вывести текст через сигналы?

Код главного окна :

import sys

from PySide6.QtWidgets import *

from Controller.Potok_Controller import Potok_Controller
from View.ui_potok import Ui_MainWindow

class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

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

        self.ui.pushButton.clicked.connect(self.open_window)

    def open_window(self):
        self.myThread = Potok_Controller()
        # self.myThread.mysignal.connect(self.sendText)
        self.myThread.start()

if __name__ == '__main__':
    app = QApplication()
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

UI код главного окна:

# -*- coding: utf-8 -*-

################################################################################
## Form generated from reading UI file 'untitledkonQbZ.ui'
##
## Created by: Qt User Interface Compiler version 6.3.1
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################

from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
    QMetaObject, QObject, QPoint, QRect,
    QSize, QTime, QUrl, Qt)
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
    QFont, QFontDatabase, QGradient, QIcon,
    QImage, QKeySequence, QLinearGradient, QPainter,
    QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QFrame, QMainWindow, QPlainTextEdit,
    QPushButton, QSizePolicy, QVBoxLayout, QWidget)

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        if not MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.verticalLayout = QVBoxLayout(self.centralwidget)
        self.verticalLayout.setObjectName(u"verticalLayout")
        self.frame = QFrame(self.centralwidget)
        self.frame.setObjectName(u"frame")
        self.frame.setFrameShape(QFrame.StyledPanel)
        self.frame.setFrameShadow(QFrame.Raised)
        self.verticalLayout_2 = QVBoxLayout(self.frame)
        self.verticalLayout_2.setObjectName(u"verticalLayout_2")
        self.plainTextEdit = QPlainTextEdit(self.frame)
        self.plainTextEdit.setObjectName(u"plainTextEdit")

        self.verticalLayout_2.addWidget(self.plainTextEdit)


        self.verticalLayout.addWidget(self.frame)

        self.frame_2 = QFrame(self.centralwidget)
        self.frame_2.setObjectName(u"frame_2")
        self.frame_2.setFrameShape(QFrame.StyledPanel)
        self.frame_2.setFrameShadow(QFrame.Raised)
        self.verticalLayout_3 = QVBoxLayout(self.frame_2)
        self.verticalLayout_3.setObjectName(u"verticalLayout_3")
        self.pushButton = QPushButton(self.frame_2)
        self.pushButton.setObjectName(u"pushButton")

        self.verticalLayout_3.addWidget(self.pushButton)


        self.verticalLayout.addWidget(self.frame_2)

        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)

        QMetaObject.connectSlotsByName(MainWindow)
    # setupUi

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))
        self.pushButton.setText(QCoreApplication.translate("MainWindow", u"\u0421\u0442\u0430\u0440\u0442 \u043f\u043e\u0442\u043e\u043a\u0430", None))
    # retranslateUi

Код потокового класса:

import time

from PySide6.QtCore import QThread

class Potok_Controller(QThread):
    def __init__(self, parent=None):
        super(Potok_Controller, self).__init__(parent)

    def txt(self):
        txt1 = 'test1'
        time.sleep(1)
        txt2 = 'test2'
        time.sleep(1)
        txt3 = 'test3'

    def run(self):
        self.txt()

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

Автор решения: Alexander Chernin

сигналы-слоты для PySide6

from PySide6.QtCore import Signal

class Potok_Controller(QThread):

    mysignal = Signal(str)

    def __init__(self, parent=None):
        super(Potok_Controller, self).__init__(parent)

    def txt(self):
        self.mysignal.emit('test1')
        time.sleep(1)
        self.mysignal.emit('test2')
        time.sleep(1)
        self.mysignal.emit('test3')

    def run(self):
        self.txt()

Теперь в окне

def open_window(self):
    self.myThread = Potok_Controller()
    self.myThread.mysignal.connect(lambda text: self.plainTextEdit.setPlainText(text))
    self.myThread.start()
→ Ссылка