➣ Reading Time: 4 minutes

問題描述

當我們撰寫 pyqt5 程式時,出現以下 error 的解決辦法

QObject::moveToThread: Current thread (0x55e28fa548d0) is not the object's thread (0x55e28fceb860). Cannot move to target thread (0x55e28fa548d0)

記憶體位置可能不同,但解法大致是相同的。

解法

個人試過有成功的方法

簡單來說,這是 OpenCV 版本過新導致的環境問題,
網路上普遍的解法有看到

  1. (個人有成功的方法) 使用 conda 安裝 pyqt,不要使用 pip install 安裝

建議先用 anaconda 建立一個乾淨的環境再來做這件事,
建立好乾淨的環境後,安裝 conda 版本的 pyqt,
再使用 pip 安裝 OpenCV

conda install pyqt
pip install opencv-python

其他網友的解法 (個人沒試過 or 試過失敗)

  1. 使用 pip 降 OpenCV 的版本 (4.3.0.36)
pip uninstall opencv-python
pip install opencv-python==4.3.0.36
pip list | grep opencv-python
  1. 移除 pip OpenCV 改用 apt-get 安裝 OpenCV
sudo pip uninstall opencv-python
sudo apt-get install libopencv-dev python-opencv

Reference

⭐Python PyQt5 相關文章整理⭐:
⭐基礎知識與架構篇⭐:
1.【PyQt5】Day 1 – 安裝 PyQt,建立自己的第一支 PyQt5 程式
2.【PyQt5】Day 2 – 利用 Qt designer 建立第一支有自己介面的 PyQt5 程式
3.【PyQt5】Day 4 – 重要的 Qt 程式邏輯觀念,務必先有此觀念後面才會懂自己在幹嘛
4.【PyQt5】Day 5 – 開始來設計我們的 controller.py,改以「程式角度」來說明如何建立 PyQt 的系統
⭐基本介面控制篇⭐:
1.【PyQt5】Day 6 – 我們的第一個 output 手段 – Qlabel
2.【PyQt5】Day 7 – 我們的第一個 input 手段 – QPushButton
3.【PyQt5】Day 8 – 我們的第二個 input 手段 – QLineEdit
4.【PyQt5】Day 9 – 以 QLineEdit, QTextEdit, QPlainTextEdit 作為文字的輸入
5.【PyQt5】Day 10 – 以 QFileDialog 讀取系統的檔案、資料夾
⭐影像處理篇⭐:
1.【PyQt5】Day 11 – 以 Qlabel 在 PyQt 中顯示圖片 (基於 QImage 使用 OpenCV)
2.【PyQt5】Day 12 – 建立一個可以縮放圖片大小的顯示器 (基於 QImage 使用 OpenCV)
3.【PyQt5】Day 13 – 使用 QVBoxLayout, QscrollArea 製作出捲軸,以高解析度檢視圖片 (基於 QImage 使用 OpenCV)
⭐打包程式篇⭐:
1.【PyQt5】Day 3 – 用 pyinstaller 將 python 程式打包,把每天的成果分享給你的親朋好友
⭐【喜歡我的文章嗎? 歡迎幫我按讚~ 讓基金會請創作者喝一杯咖啡!
如果喜歡我的文章,請幫我在下方【按五下Like】 (Google, Facebook 免註冊),會由 「LikeCoin」 贊助作者鼓勵繼續創作,讀者們「只需幫忙按讚,完全不用出錢」哦!

likecoin-steps