PyQt5.QThread 的 start() 方法不执行 run() 方法

Posted

技术标签:

【中文标题】PyQt5.QThread 的 start() 方法不执行 run() 方法【英文标题】:PyQt5.QThread's start() méthod don't execute the run() méthod 【发布时间】:2018-08-06 22:48:35 【问题描述】:

我开始学习 PyQt5 和 Qthread,我正在尝试做一个简单的 QThread 实现,我知道这很明显,但我真的不明白为什么它不起作用

我的代码:

from PyQt5 import QtCore


class WorkingThread(QtCore.QThread):
    def __init__(self):
        super().__init__()

    def run(self):
        print(" work !")


class MainWindow(QtCore.QObject):

    worker_thread = WorkingThread()

    def engage(self):
        print("calling start")
        self.worker_thread.start()


if __name__ == "__main__":
    main = MainWindow()
    main.engage()

输出:

通话开始

进程以退出代码 0 结束

没有“工作!”打印出来的

【问题讨论】:

【参考方案1】:

Qt 的许多元素都需要一个事件循环才能正常工作,QThread 就是这种情况,因为在这种情况下没有 GUI,因此创建 QCoreApplication 是合适的:

from PyQt5 import QtCore


class WorkingThread(QtCore.QThread):
    def run(self):
        print(" work !")


class MainWindow(QtCore.QObject):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.worker_thread = WorkingThread()

    def engage(self):
        print("calling start")
        self.worker_thread.start()


if __name__ == "__main__":
    import sys

    app = QtCore.QCoreApplication(sys.argv)
    main = MainWindow()
    main.engage()
    sys.exit(app.exec_())

【讨论】:

非常感谢!我已经为此绞尽脑汁

以上是关于PyQt5.QThread 的 start() 方法不执行 run() 方法的主要内容,如果未能解决你的问题,请参考以下文章

python pyqt5 QThread

如何使用 PyQt5 QThread 从 CLASS(ShowVideo) 中获取值以在第二个 CLASS(ImageViewer) 中使用(根据我的程序)

Failed to to start Clean up any mess left by 0dns-op解决方

eclipse中启动项目出现server tomcat v6.0 server at localhost failed to start错误。希望给明确的解决方

点滴积累方有为,每步思索可致远

EAP认证