【问题标题】:pyqt thread seperating makes the program crashpyqt线程分离导致程序崩溃
【发布时间】: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 插槽。 但是,即使我只尝试设置小部件的父级,它也会崩溃而没有任何回溯。

【问题讨论】:

  • 鉴于公认的答案说你不能做你已经做过的事情,我鼓励你考虑提出一个问题,在其中解释你正在尝试做什么,以便有人可以提供建议如何在这种情况下正确使用线程。

标签: python pyqt pyqt4 qthread


【解决方案1】:

GUI 不应直接在非主线程的另一个线程中更新,这也意味着您不应在另一个线程中创建小部件

阅读以下内容:http://doc.qt.io/archives/qt-4.8/thread-basics.html#gui-thread-and-worker-thread

【讨论】:

    猜你喜欢
    • 2016-07-01
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    • 2021-03-28
    相关资源
    最近更新 更多