【发布时间】:2018-08-12 15:16:50
【问题描述】:
我正在测试线程之间的一些 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 插槽。 但是,即使我只尝试设置小部件的父级,它也会崩溃而没有任何回溯。
【问题讨论】:
-
鉴于公认的答案说你不能做你已经做过的事情,我鼓励你考虑提出一个问题,在其中解释你正在尝试做什么,以便有人可以提供建议如何在这种情况下正确使用线程。