我正在测试线程之间的一些gui交互以将它应用到我的程序中,但是如果我尝试它,程序就会突然崩溃。
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class Window(QWidget):
def __init__(self):
super().__init__()
qv = QVBoxLayout()
self.board = QLabel(self)
self.board.setFixedSize(300, 300)
self.board.setStyleSheet("background-color:yellow;")
qv.addWidget(self.board)
self.setLayout(qv)
self.show()
self.thread = Thread()
self.thread.setparent.connect(self.setparent)
self.thread.start()
def __del__(self):
self.thread.exit(0)
@pyqtSlot(QWidget)
def setparent(self, widget):
widget.setParent(self)
class Thread(QThread):
setparent = pyqtSignal(QWidget)
def __init__(self):
super().__init__()
def run(self):
label = QLabel()
self.setparent.emit(label)
def __del__(self):
print("Thread terminated")
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
form = Window()
app.exec_()
如您所见,线程发出“setparent”信号,主线程将其连接到其setparent插槽。 但是,它只是在没有任何回溯的情况下崩溃,即使我只尝试设置widget的父级。
答案 0 :(得分:0)
不应该在另一个不是主线程的线程中直接更新GUI,这也意味着你不应该在另一个线程中创建小部件
阅读以下内容:http://doc.qt.io/archives/qt-4.8/thread-basics.html#gui-thread-and-worker-thread