在 PyQt 中使用线程

虽然 Qt 框架的某些部分是线程安全的,但其中大部分都不是。在 Qt 的 C++文档提供了一个很好的概述,其中类是可重入的(可用于实例化在多个线程中的对象)。以下规则是最受欢迎的:

  • 你无法从主线程外部创建或访问 Qt GUI 对象(例如,任何子类 QWidget 或类似的东西)。
  • 即使 Qt 类是可重入的,也不能在线程之间共享对 Qt 对象的访问,除非该类的 Qt 文档明确指出实例是线程安全的。
  • 如果需要将 Qt 对象从一个线程移动到另一个线程,则可以使用 QObject.moveToThread()(不适用于必须始终保留在主线程中的 Qt GUI 对象)。但请注意,该对象不得包含父对象。

根据 Stack Overflow QA,如果你的线程打算以任何方式与 PyQt 交互,则不建议使用 Python 线程(即使 Qt 框架的那部分是线程安全的)。