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