0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

OpenCV+PyQT5開(kāi)發(fā)桌面應(yīng)用幾個(gè)重要的坑與解決

OpenCV學(xué)堂 ? 來(lái)源:OpenCV開(kāi)發(fā)者聯(lián)盟 ? 作者: 2號(hào)高手 ? 2022-12-13 11:55 ? 次閱讀

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)品的圖片

af2ba9ce-7a16-11ed-8abf-dac502259ad0.jpg

af3f7a30-7a16-11ed-8abf-dac502259ad0.jpg

af569f30-7a16-11ed-8abf-dac502259ad0.jpg


三個(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ì)兩行代碼完成。貼一下如下:

af74e6f2-7a16-11ed-8abf-dac502259ad0.png

afab1150-7a16-11ed-8abf-dac502259ad0.png


第一行放在構(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)論!

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4260

    瀏覽量

    62228
  • OpenCV
    +關(guān)注

    關(guān)注

    29

    文章

    623

    瀏覽量

    41177
  • pyqt5
    +關(guān)注

    關(guān)注

    0

    文章

    25

    瀏覽量

    3388

原文標(biāo)題:OpenCV+PyQT5開(kāi)發(fā)桌面應(yīng)用幾個(gè)重要的坑與解決

文章出處:【微信號(hào):CVSCHOOL,微信公眾號(hào):OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    可視可交互!H618上用OpenCV讀取圖像顯示到PyQt5窗口上

    這里分享一個(gè)代碼,功能是使用圖像處理庫(kù)opencv從攝像頭獲取數(shù)據(jù),縮放后從pyqt5的窗口中顯示出來(lái)。安裝opencvsudo pip3 install opencv-python創(chuàng)建一個(gè)
    發(fā)表于 01-10 09:55

    在全志H616核桃派開(kāi)發(fā)板上進(jìn)行PyQt5的代碼編寫和運(yùn)行

    ctrl+c 即可退出窗口程序。 通過(guò)3.5寸LCD顯示 上面方法既可通過(guò)核桃派HDMI顯示器顯示,也可以通過(guò)3.5寸LCD顯示。3.5寸顯示屏使用說(shuō)明:3.5寸觸摸顯示屏 無(wú)桌面系統(tǒng)運(yùn)行pyQT5
    發(fā)表于 05-13 09:59

    PyQt

    。它是一個(gè)多平臺(tái)的工具包,可以運(yùn)行在所有主要操作系統(tǒng)上,包括UNIX,Windows和Mac。 PyQt采用雙許可證,開(kāi)發(fā)人員可以選擇GPL和商業(yè)許可。在此之前,GPL的版本只能用在Unix上,從PyQt
    發(fā)表于 04-14 10:26

    如何使用Python配合PyQT5模塊來(lái)開(kāi)發(fā)圖形化應(yīng)用程序

    By Toradex秦海1).簡(jiǎn)介隨著Python在互聯(lián)網(wǎng)人工智能領(lǐng)域的流行,大家也慢慢感受到Python開(kāi)發(fā)的便利,本文就基于嵌入式ARM平臺(tái),介紹使用Python配合PyQT5模塊來(lái)開(kāi)發(fā)圖形化
    發(fā)表于 12-24 06:41

    OpenCV開(kāi)發(fā)環(huán)境的配置

    OpenCV3編程入門》書本配套源代碼:OpenCV開(kāi)發(fā)環(huán)境的配置
    發(fā)表于 06-06 15:20 ?8次下載

    如何安裝和配置OpenCVOpenCV幾個(gè)小問(wèn)題解答

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何安裝和配置OpenCVOpenCV幾個(gè)小問(wèn)題解答包括了:安裝和配置OpenCV,Highgui.h與CvvImage類的問(wèn)題:,如何通過(guò)攝像頭獲取視
    發(fā)表于 12-17 17:25 ?9次下載
    如何安裝和配置<b class='flag-5'>OpenCV</b>及<b class='flag-5'>OpenCV</b>的<b class='flag-5'>幾個(gè)</b>小問(wèn)題解答

    總結(jié)那么幾個(gè)C語(yǔ)言中的“

    總結(jié)幾個(gè)C語(yǔ)言中的“
    的頭像 發(fā)表于 01-16 10:52 ?2518次閱讀

    PyQt5的中文教程電子書免費(fèi)下載

     本教程的目的是帶領(lǐng)你入門PyQt5。教程內(nèi)所有代碼都在Linux上測(cè)試通過(guò)。PyQt4 教程是PyQt4的教程,PyQt4是一個(gè)Python(同時(shí)支持 2和3)版的Qt庫(kù)。
    發(fā)表于 08-06 08:00 ?13次下載
    <b class='flag-5'>PyQt5</b>的中文教程電子書免費(fèi)下載

    notepad-pyqt5 PyQt記事本

    ./oschina_soft/gitee-notepad-pyqt5.zip
    發(fā)表于 05-24 09:20 ?4次下載
    notepad-<b class='flag-5'>pyqt5</b> <b class='flag-5'>PyQt</b>記事本

    PyQT5+OpenCV開(kāi)發(fā)的應(yīng)用如何打包發(fā)布?

    我自己用PyQT5寫了一個(gè)應(yīng)用程序,基本上都寫好了,到了打包發(fā)布這個(gè)環(huán)節(jié),我知道的有兩個(gè)工具可以幫我打包分別是。
    的頭像 發(fā)表于 10-25 09:40 ?1897次閱讀

    2023年P(guān)ython GUI桌面應(yīng)用開(kāi)發(fā)該選哪個(gè)庫(kù)

    當(dāng)前主流的Python GUI庫(kù)主要有PyQT5、TKinter、Pyside、PyQT5/PySide+QML、Kivy、PySimpleGUI等,PyQT5是它們當(dāng)中絕對(duì)的佼佼者,它基于著名的Qt框架構(gòu)建,擁有眾多
    的頭像 發(fā)表于 01-30 11:57 ?1625次閱讀

    PyQT5+OpenCV多線程協(xié)作演示

    學(xué)習(xí)多線程最典型的問(wèn)題就是如何在多個(gè)線程之間傳遞消息與寫作,PyQT5的線程支持在不同線程之間傳遞信號(hào)觸發(fā)事件,實(shí)現(xiàn)多個(gè)線程之間的協(xié)助,完成諸如生產(chǎn)者-消費(fèi)者這樣經(jīng)典的多線程協(xié)作。本文將通過(guò)QThread與信號(hào)槽機(jī)制構(gòu)建一個(gè)生產(chǎn)者-消費(fèi)者模型,演示多個(gè)線程之間的協(xié)作。
    的頭像 發(fā)表于 03-08 14:58 ?1240次閱讀

    PyQT開(kāi)發(fā)上位機(jī)教程

    ,兩個(gè)都需要安裝,需要記住安裝的位置,一會(huì)兒需要設(shè)置環(huán)境變量。 pip install PyQt5pip install PyQt5 - tools ( DemoProject )E : \WorkSp
    發(fā)表于 05-08 09:59 ?3次下載
    <b class='flag-5'>PyQT</b><b class='flag-5'>開(kāi)發(fā)</b>上位機(jī)教程

    使用pycharm開(kāi)發(fā)上位機(jī)配置pyqt5的環(huán)境

    在上位機(jī)的開(kāi)發(fā)過(guò)程中,使用QT的圖形化界面,是開(kāi)發(fā)上位機(jī)最好最簡(jiǎn)單的選擇,因此我將講述配置pyqt5的環(huán)境。 軟件安裝: 安裝:pycharm的社區(qū)2021.02版 QT(安裝參考https
    發(fā)表于 05-29 16:12 ?0次下載
    使用pycharm<b class='flag-5'>開(kāi)發(fā)</b>上位機(jī)配置<b class='flag-5'>pyqt5</b>的環(huán)境

    基于PyQT5與ONNXRUNTIME實(shí)現(xiàn)風(fēng)格遷移應(yīng)用

    2023年一月份跟二月份創(chuàng)建了一個(gè)PyQT5人工智能軟件開(kāi)發(fā)系列的文章系列,過(guò)去的兩個(gè)月都沒(méi)怎么更新,心里一直想有時(shí)間繼續(xù)更新下去,今天又更新了一篇,基于PyQT5實(shí)現(xiàn)多線程、界面化、風(fēng)格遷移模型的實(shí)時(shí)推理。
    的頭像 發(fā)表于 10-25 10:35 ?458次閱讀
    基于<b class='flag-5'>PyQT5</b>與ONNXRUNTIME實(shí)現(xiàn)風(fēng)格遷移應(yīng)用