【发布时间】:2013-05-28 14:44:20
【问题描述】:
我正在尝试学习如何在 PyQt Gui 应用程序中使用 QThreads。我的东西可以运行一段时间,(通常)有可以更新 Gui 的点,但我想将主要工作分成自己的线程(有时东西会卡住,最终有一个很好的取消/重试按钮,如果 Gui 因为主循环被阻塞而被冻结,这显然不起作用)。
我读过https://mayaposch.wordpress.com/2011/11/01/how-to-really-truly-use-qthreads-the-full-explanation/。该页面说重新实现 run 方法不是这样做的方法。我遇到的问题是找到一个 PyQt 示例,它有一个执行 Gui 的主线程和一个不这样做的工作线程。这篇博客文章是针对 C++ 的,所以虽然它的例子确实有帮助,但我还是有点迷茫。有人可以指出一个在 Python 中正确执行此操作的示例吗?
【问题讨论】:
-
这看起来像是 Background thread with QThread in PyQt 的副本。已接受答案中的第二个示例看起来像是您链接的博客中 C++ 代码的直接翻译。
-
另外,您是否编写过任何本机 Python 线程代码(使用
threading.Thread等)?如果没有,您可能需要先完成一些示例。 (另请参阅Threading in a PyQt application: Use Qt threads or Python threads,看看您是否还需要 QThread。) -
@abarnert 谢谢,我认为该链接正是我想要的。我已经看到了第二个链接,并决定我应该使用 QThreads,因为我希望能够在线程之间发送槽/信号。我知道
threading.Thread存在,但之前没有使用过。我做了很多搜索,甚至看到了第一个链接,浏览了一下,看到了def run并继续前进,没有意识到这两种方式都显示了!