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() 方法的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 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错误。希望给明确的解决方