为什么线程在PyQt5中不起作用?

时间:2018-02-18 15:36:06

标签: multithreading qt pyqt5 qthread

以下是代码的一部分:

let group = groupItemBy(cart, 'id');
console.log(group.length); // should be greater than 1 for multiple indexes

它给了我这个错误信息: " QObject:无法为不同线程中的父级创建子级。 (Parent是QTextDocument(0xd08b98),父线程是QThread(0xc6f620),当前线程是QThread(0x4a2c810)"

我该如何解决?

1 个答案:

答案 0 :(得分:0)

鉴于您的self.textFieldQTextEdit,每当您调用其append方法时,QTextCursor都会被创建为QTextEdit底层{的{child} {1}}对象。 这有什么问题? Qt不会允许任何QObject派生类让孩子“生活”在与父母一个不同的线程中 怎么解决?既然你已经在使用它们,那就让我们使用信号和插槽。

首先定义一个这样的信号:

QTextDocument

和相应的插槽:

appendText = pyqtSignal(str)

连接它们:

def appendToTextField(self, text):
    self.textField.append(text)

然后代替:

self.appendText.connect(self.appendToTextField)

做的:

for i in pattern:
    self.textField.append(i)

for i in pattern: self.appendText.emit(i) 插槽应该在正确的线程中运行,appendToTextField底层QTextEdit生存的那个,因此Qt会将新的子节点添加到其中。