PyQt5/PySide2, QTextEdit için setText() ve setPlainText() uygularken hata

Merhabalar.

PySide2 kullanarak bir çeşit arayüz geliştirmeye çalışıyorum. Arayüz üzerindeki QTextEdit’e her saniye yeni bir yazı eklemem gerekiyor. Kodların bir kısmı şu şekilde:

import sys
from PySide2.QtCore import *
from PySide2.QtGui import *
from PySide2.QtWidgets import *
import threading
import time

keep_running = True

class Device:
    def __init__(self):
        pass

    def write(self):
        gui.add_text("SerialMonitor", "Hello World!")

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setFixedSize(875, 475)
        self.move(0, 0)
        self.TextEdits = {}
        self.setup_TextEdits()
        self.show()
# .
# .
# .
    def setup_TextEdits(self):
        self.TextEdits.update({"SerialMonitor": QTextEdit(self)})
        self.TextEdits["SerialMonitor"].setGeometry(QRect(25, 25, 700, 425))
        self.TextEdits["SerialMonitor"].setStyleSheet(f"background-color:rgb{(180, 180, 180)};")

    def add_text(self, object_name, text_to_add):
        TextEdit = self.TextEdits[object_name]
        TextEdit.setText(f"{TextEdit.toPlainText()}\n{text_to_add}")

app = QApplication(sys.argv)
D = Device()
gui = MainWindow()

gui.add_text("SerialMonitor", "Hello World!")

app.exec_()

Yukarıdaki gibi çalıştırdığımda bir sıkıntı yok, istediğimi elde edebiliyorum.
Fakat ne zaman ki threading kullanarak bunu yapmaya çalışsam, arayüz anında donup kalıyor.

threading.Thread(target=D.write).start()

Normalde threading ile while döngüsünde her saniye bir şeyler yazdırmam lazım. Fakat döngüsüz de olsa setText() ile arayüz donup kalıyor. Neden böyle olduğu konusunda bir fikriniz var mıdır dostlar?

Donduktan kısa bir süre sonra kapanıyor:

Process finished with exit code -1073741819 (0xC0000005)

Edit: clear() yapınca da aynısı oluyor. QTextEdit’teki yazıyla ilgili en ufak bir değişiklik yapamıyorum.

GUI islerini ana thread disindan yapamazsin.

Ana thread’e signal yollayip add_text'i handler (slot) icinde cagirman lazim. “qt/pyqt/pyside + thread/signal” aratirsan ornek bulabilirsin.

Su arkadas da ayni dertten muzdarip.

Surada daha basit sinyaller var.

1 Beğeni