在 PyQt 中使用執行緒

雖然 Qt 框架的某些部分是執行緒安全的,但其中大部分都不是。在 Qt 的 C++文件提供了一個很好的概述,其中類是可重入的(可用於例項化在多個執行緒中的物件)。以下規則是最受歡迎的:

  • 你無法從主執行緒外部建立或訪問 Qt GUI 物件(例如,任何子類 QWidget 或類似的東西)。
  • 即使 Qt 類是可重入的,也不能線上程之間共享對 Qt 物件的訪問,除非該類的 Qt 文件明確指出例項是執行緒安全的。
  • 如果需要將 Qt 物件從一個執行緒移動到另一個執行緒,則可以使用 QObject.moveToThread()(不適用於必須始終保留在主執行緒中的 Qt GUI 物件)。但請注意,該物件不得包含父物件。

根據 Stack Overflow QA,如果你的執行緒打算以任何方式與 PyQt 互動,則不建議使用 Python 執行緒(即使 Qt 框架的那部分是執行緒安全的)。