QObject: Cannot create children for a parent that is in a different thread. (Parent is QApplication(0x1cdd1d643e0), parent's thread is QThread(0x1cdbe8f9550), current thread is QThreadPoolThread(0x1cdd1af5550) QObject::setParent: Cannot set parent, new parent is in a different thread 这个报警在pyqt5里怎么解决?
时间: 2023-07-28 19:44:11 浏览: 209
PyQt5点击按钮弹出自定义窗口 创建新窗口
5星 · 资源好评率100%
在PyQt5中解决这个报警的方法与在Qt C++中类似。需要确保在同一个线程中创建和使用对象及其子对象。以下是一个简单的演示代码:
```python
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtCore import QThread, QObject
class MyObject(QObject):
def __init__(self, parent=None):
super().__init__(parent)
if __name__ == '__main__':
app = QApplication([])
# 在主线程中创建一个MyObject对象
myObject = MyObject(app)
# 在另一个线程中创建一个QObject对象,并将其设置为MyObject对象的子对象
thread = QThread()
childObject = QObject(myObject)
childObject.moveToThread(thread)
app.exec_()
```
在上面的代码中,我们在主线程中创建了一个MyObject对象,并将其设置为QApplication的子对象。然后,我们在另一个线程中创建了一个QObject对象,并将其设置为MyObject对象的子对象。这会导致上述报警,因为MyObject对象和QObject对象不在同一个线程中。
要解决这个问题,我们需要确保在同一个线程中创建和使用对象及其子对象。因此,我们可以将QObject对象的创建和设置都放在同一个线程中,例如:
```python
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtCore import QThread, QObject
class MyObject(QObject):
def __init__(self, parent=None):
super().__init__(parent)
if __name__ == '__main__':
app = QApplication([])
# 在主线程中创建一个MyObject对象
myObject = MyObject(app)
# 在主线程中创建一个QObject对象,并将其设置为MyObject对象的子对象
childObject = QObject(myObject)
app.exec_()
```
在上面的代码中,我们将QObject对象的创建和设置都放在了同一个线程中(即主线程),因此不会出现报警。
阅读全文