【问题标题】:Handle When i Use Threading QTextEdit [duplicate]当我使用线程QTextEdit时处理[重复]
【发布时间】:2020-04-06 13:33:16
【问题描述】:

代码:

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'。)

【问题讨论】:

  • 除此之外,您似乎正在从辅助线程更新 GUI 对象(QTextEdit)。不支持。

标签: python python-3.x pyqt pyqt5 python-3.7


【解决方案1】:

您不能直接从另一个线程将文本添加到 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")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-12
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多