你能创建一个单独的 QThread class 并且只从它调用一个特定的函数吗?

Can you create a separate QThread class and only call a specific function from it?

我已经尝试尽可能多地阅读有关 PyQt4 的 QThread 和工作线程的概念。我的问题是,不是通过 blahblah.start() 命令从 def run(self): 构建一个 QThread class 到 运行 中的所有内容,有没有办法创建那个单独的线程 class 有,比方说,4 个函数,你只调用函数 2,然后立即关闭那个线程?

Subclassing QThread 是一种普遍 discouraged 尽管经常使用的做法。 [见下方评论]

在我看来,this 是如何在 pyqt 中使用线程的一个很好的例子。您将创建一个 Worker 和一个 Thread,其中 Worker 是 QObject 类型的一些通用 class,而 Thread 是您不子 class 的 QThread。然后,您将工人移动到威胁并启动它。

    self.worker = WorkerObject()
    self.worker_thread = QtCore.QThread()
    self.worker.moveToThread(self.worker_thread)
    self.worker_thread.start()

在 Worker 里面你基本上可以做任何你想做的事情,它可以有任意多的方法等等。
要记住的一件大事是 Worker 需要与主循环分开。所以这些方法不应该 return 主循环中使用的任何东西(最好不要 return 任何东西)并且应该使用信号和槽收集 Worker 的结果。

self.button_start.clicked.connect(self.worker.startWork)
self.button_do_something_else.clicked.connect(self.worker.function2)
self.worker.signalStatus.connect(self.updateStatus)

还要确保不要在 worker 中使用任何 PyQt/GUI 对象,因为这也会通过 PyQt 本身在 Worker 和主循环之间建立一座桥梁。