我使用线程QTextEdit时的句柄

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

代码:

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

ERROR:QObject :: connect:无法将'QTextCursor'类型的参数排队(确保已使用qRegisterMetaType()注册了“ QTextCursor”。)

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

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

class MainWindow(QMainWindow):
    updateText = QtCore.pyqtSignal(str)

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

        self.updateText.connect(self.textEdit_3.insertPlainText)

    # ...

    def update1(self):
        self.updateText.emit("test")
© www.soinside.com 2019 - 2024. All rights reserved.