当我使用线程 QTextEdit 时处理

Handle When i Use Threading QTextEdit

代码:

class MainWindow(QMainWindow):

  def __init__(self):
    super().__init__()
    self.initUI()
  def initUI(self):
    self.textEdit_3 = QtWidgets.QTextEdit()
    self.textEdit_3.setGeometry(QtCore.QRect(390, 40, 451, 441))
    self.textEdit_3.setReadOnly(True)
    self.textEdit_3.setObjectName("textEdit_3")
    font = QtGui.QFont()
    font.setPointSize(13)
    self.textEdit_3.setFont(font)
    self.r()
    self.setGeometry(600, 100, 1000, 900)
    self.setWindowTitle('Scroll Area Demonstration')
    self.show()
  def r(self):
    self.vaa = Thread(target=self.update1)
    self.vaa.start()
  def update1(self):
    self.textEdit_3.insertPlainText('test')
def main():
  app = QtWidgets.QApplication(sys.argv)
  main = MainWindow()
  sys.exit(app.exec_())

if __name__ == '__main__':
    main()

错误:QObject::connect:无法对类型'QTextCursor'的参数进行排队 (确保使用 qRegisterMetaType() 注册 'QTextCursor'。)

您不能将文本直接从另一个线程添加到 QTextEdit(或另一个 GUI 元素),但您必须使用标记和其他线程安全的元素:

class MainWindow(QMainWindow):
    <b>updateText = QtCore.pyqtSignal(str)</b>

    def __init__(self):
        super().__init__()
        self.initUI()

        <b>self.updateText.connect(self.textEdit_3.insertPlainText)</b>

    # ...

    def update1(self):
        <b>self.updateText.emit("test")</b>