PyQT5+OpenCV開發
大概去年八月份的時候,我打算用OpenCV+PyQT5開發一套OpenCV教學演示與快速驗證桌面軟件,說實話那個時候我對PyQT5的理解就是Hello World水平。經過一年多開發錘煉,不斷實踐,我感覺是熟練掌握了界面組件與布局組件應用、事件響應、多線程與數據傳輸、各種繪圖與繪制控件編程技巧、應用發布打包等環節,完成了這套教學軟件的開發與測試,并且已經支持Windows、Ubuntu、Jetpack等平臺運行,而且全部通過測試。下面就放幾張核心產品的圖片
三個最重要坑
開發過程遇到最大的兩個個坑就是事件重復響應與界面控件無法響應鍵盤輸入,最終這兩個問題是都解決了。在部署階段,在不同操作系統Windows、Ubuntu、Jetpack兼容性測試遇到最大的一個坑就是PyQT5版本支持的問題。這個通過仔細分析原因也得到解決。這幾個問題網上都有各自不正確,不徹底的解決方法,無法真正解決這些問題,而我是徹底的解決這三個典型問題,這里分享一下經驗,避免大家踩坑。
01PyQT5槽函數多次響應執行的問題
典型的就是點擊按鈕多次執行槽函數,網上很多的解決方法就是添加
# disconnect/connect def solution_bad(): mybutton.disconnect() mybutton.clicked.connect(my_func)
這種方法只是治標不治本,真實的原因是因為你的組件多次綁定槽函數了,桌面應用程序開發在多個界面之間切換的時,特別要小心注意這點。后來我都是幫事件綁定槽函數單獨寫在一個方法里面,確保只調用一次!例如:
02UI組件無法響應鍵盤輸入
界面上QLineEdit/QSpinbox等組件統統無法響應鍵盤輸入了,重新自己寫一個簡單的例子可以,在桌面應用程序中不行,無法輸入。但是我發現一個奇怪方法可以讓QLineEdit/QSpinbox等組件支持輸入,就是安裝“谷歌輸入法”,其它輸入法我都測試過,根本還是無法輸入,最終找到的原因是PyQT5中Widget界面鍵盤交互是有函數支持的,當桌面應用程序切換時候時候,必須先釋放當前的鍵盤綁定,然后在切換后的鍵盤中才可以使用,否則就會發生輸入UI組件一直無法響應鍵盤輸入,這個在Windows/Ubutun/Jetpack上都一樣,親測如此,解決的方法很簡單,在切換操作之前添加釋放鍵盤的函數調用就可以了。總計兩行代碼完成。貼一下如下:
第一行放在構造函數里面,第二行放在你切換之前。就這樣完美解決了!
但是這個問題困擾了我幾個月,原因是各種教程里面不會涉及這么復雜的UI切換跟開發,但是你開發桌面應用程序就會涉及,所以遇到了這個問題之后,網上都沒有答案,最后我自己覺得是鍵盤輸入問題,無意中搜索到官方文檔看到這兩個方法,靈機一動,發現驚喜了!所以遇到問題,一定先搜索一下官方的API開發文檔,搜索關鍵字!
03排版是門技術活
在Ubutun系統上運行時候發現一直有下面的錯誤:
qt.qpa.plugin:CouldnotloadtheQtplatformplugin“xcb”
正常情況下安裝相關lib之后即可解決,但是如果你安裝OpenCV4.5.x版本,則會一直遇到這個錯誤,無論是Ubutun18/ Ubutun20,網上提供的解決方案都是把OpenCV版本回退到4.3.1之前。
我仔細分析了錯誤信息跟安裝的苦支持信息,發現原因是PyQT5安裝版本跟支持庫版本不一致導致的沖突問題,我把PyQT5版本從5.15改成5.12成功解決這個錯誤,而且OpenCV可以直接用最新版本。
這幾個是讓我印象特別深刻的錯誤,每個都是多方查證,分析之后解決的。歡迎在下面留言分享你用PyQT5開發遇過的那些讓你印象深刻的坑與解決方法!
總結:
通過開發這款軟件的經驗積累與知識整理,現在有個人想要學習PyQT5桌面應用程序開發,我三個月肯定能讓他達到我現在的水平,這個就是經驗跟系統化學習之后總結出來的好處!讓后來人少走彎路,少踩坑!
針對上述三個問題,如果你有更好的解決方案,歡迎留言評論!
審核編輯:湯梓紅
-
函數
+關注
關注
3文章
4304瀏覽量
62427 -
OpenCV
+關注
關注
30文章
628瀏覽量
41259 -
pyqt5
+關注
關注
0文章
25瀏覽量
3394
原文標題:OpenCV+PyQT5開發桌面應用幾個重要的坑與解決
文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學堂】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論