如何解决PyQt5从不同线程分配对象
我是新手,所以请原谅... 我故意要从其他线程创建对象(小部件),但是pyqt5不允许我这样做,这是我得到的错误,
QObject::setParent: Cannot set parent,new parent is in a different thread
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QApplication(0x1ce1e54e590),parent's thread is QThread(0x1ce1e457a50),current thread is QThread(0x1ce1fee2e50)
这是我的代码...有办法解决吗?
from PyQt5 import QtCore,QtGui,QtWidgets
import threading
import sys
class Ui_MainWindow(object):
def __init__(self):
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.thread = threading.Thread(target = self.func)
def func(self):
self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget)
self.textBrowser.setGeometry(QtCore.QRect(170,160,256,192))
self.textBrowser.setObjectName("textBrowser")
def setupUi(self,MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800,600)
self.centralwidget.setObjectName("centralwidget")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
self.thread.start()
def retranslateUi(self,MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow","MainWindow"))
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
预先感谢:)
解决方法
仅我将线程更改为QThread,并使用标签进行了测试,它可以正常工作,看看它现在是否对您有用:
from PyQt5 import QtCore,QtGui,QtWidgets
import sys
class Ui_MainWindow(object):
def __init__(self):
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.thread = QtCore.QThread()
def func(self):
self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget)
self.textBrowser.setGeometry(QtCore.QRect(170,160,256,192))
self.textBrowser.setObjectName("textBrowser")
self.label.setText("Bye")
def setupUi(self,MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800,600)
self.centralwidget.setObjectName("centralwidget")
MainWindow.setCentralWidget(self.centralwidget)
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setText("hello")
self.label.setObjectName("label")
self.label.setGeometry(QtCore.QRect(160,120,231,16))
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
self.thread.started.connect(self.func)
self.thread.start()
def retranslateUi(self,MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow","MainWindow"))
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。