0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenCV+PyQT5开发桌面应用几个重要的坑与解决

OpenCV学堂 来源:OpenCV开发者联盟 作者: 2号高手 2022-12-13 11:55 次阅读

PyQT5+OpenCV开发


大概去年八月份的时候,我打算用OpenCV+PyQT5开发一套OpenCV教学演示与快速验证桌面软件,说实话那个时候我对PyQT5的理解就是Hello World水平。经过一年多开发锤炼,不断实践,我感觉是熟练掌握了界面组件与布局组件应用、事件响应、多线程与数据传输、各种绘图与绘制控件编程技巧、应用发布打包等环节,完成了这套教学软件的开发与测试,并且已经支持Windows、Ubuntu、Jetpack等平台运行,而且全部通过测试。下面就放几张核心产品的图片

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

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

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


三个最重要坑


开发过程遇到最大的两个个坑就是事件重复响应与界面控件无法响应键盘输入,最终这两个问题是都解决了。在部署阶段,在不同操作系统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上都一样,亲测如此,解决的方法很简单,在切换操作之前添加释放键盘的函数调用就可以了。总计两行代码完成。贴一下如下:

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

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


第一行放在构造函数里面,第二行放在你切换之前。就这样完美解决了!

但是这个问题困扰了我几个月,原因是各种教程里面不会涉及这么复杂的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

    文章

    3868

    浏览量

    61309
  • OpenCV
    +关注

    关注

    29

    文章

    611

    浏览量

    40778
  • pyqt5
    +关注

    关注

    0

    文章

    25

    浏览量

    3361

原文标题:OpenCV+PyQT5开发桌面应用几个重要的坑与解决

文章出处:【微信号:CVSCHOOL,微信公众号:OpenCV学堂】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    可视可交互!H618上用OpenCV读取图像显示到PyQt5窗口上

    这里分享一个代码,功能是使用图像处理库opencv从摄像头获取数据,缩放后从pyqt5的窗口中显示出来。安装opencvsudo pip3 install opencv-python创建一个
    发表于 01-10 09:55

    PyQt

    。它是一个多平台的工具包,可以运行在所有主要操作系统上,包括UNIX,Windows和Mac。 PyQt采用双许可证,开发人员可以选择GPL和商业许可。在此之前,GPL的版本只能用在Unix上,从PyQt
    发表于 04-14 10:26

    【NanoPi NEO试用体验】OpenCV使用篇

    命令编译,生成可执行文件: 图23.这里通过Windows远程桌面登录,运行生成的可执行文件,结果如下: 图3百度了一下,意思是由于使用的远程桌面,不支持显示。然而开发板又没有视频输出接口。难道
    发表于 12-03 20:56

    【Firefly RK3399试用体验】第二篇:PyQt5大战点灯

    ,使用命令apt install python3-pyqt5Ubuntu里也提供了一些IDE开发工具如IDLE、Spyder等等,此处不详细介绍它们安装过程。之后我们开始编写Pyqt5点灯,需要的前提
    发表于 06-12 07:49

    ModuleNotFoundError No module named 'PyQt5sip'的解决方法

    成功解决 ModuleNotFoundError No module named 'PyQt5sip'
    发表于 12-25 17:22

    OpenCV学习之路--5--OpenCV3.4.10的ARM版本移植到开发板 精选资料分享

    开发板:迅为IMX6Q移植QTE5.7编译好的ARM版本OpenCV3.4.10文件:OpenCV3.4.10 ARM版编译好的OpenCV依赖库文件:1.将/usr/local/ar
    发表于 07-16 06:55

    如何使用Python配合PyQT5模块来开发图形化应用程序

    By Toradex秦海1).简介随着Python在互联网人工智能领域的流行,大家也慢慢感受到Python开发的便利,本文就基于嵌入式ARM平台,介绍使用Python配合PyQT5模块来开发图形化
    发表于 12-24 06:41

    鲁班猫0 ubuntu20 解决python3.10安装pyqt5

    前面用pip install pyqt5,总是安装不成功。经查阅资料,最后用:udo apt install python3-pyqt5成功安装cat@lubancat:~$
    发表于 04-09 11:04

    OpenCV开发环境的配置

    OpenCV3编程入门》书本配套源代码:OpenCV开发环境的配置
    发表于 06-06 15:20 8次下载

    如何安装和配置OpenCVOpenCV几个小问题解答

    本文档的主要内容详细介绍的是如何安装和配置OpenCVOpenCV几个小问题解答包括了:安装和配置OpenCV,Highgui.h与CvvImage类的问题:,如何通过摄像头获取视
    发表于 12-17 17:25 9次下载
    如何安装和配置<b class='flag-5'>OpenCV</b>及<b class='flag-5'>OpenCV</b>的<b class='flag-5'>几个</b>小问题解答

    PyQT5+OpenCV开发的应用如何打包发布?

    我自己用PyQT5写了一个应用程序,基本上都写好了,到了打包发布这个环节,我知道的有两个工具可以帮我打包分别是。
    的头像 发表于 10-25 09:40 1415次阅读

    2023年Python GUI桌面应用开发该选哪个库

    当前主流的Python GUI库主要有PyQT5、TKinter、Pyside、PyQT5/PySide+QML、Kivy、PySimpleGUI等,PyQT5是它们当中绝对的佼佼者,它基于著名的Qt框架构建,拥有众多
    的头像 发表于 01-30 11:57 1346次阅读

    PyQT开发上位机教程

    了,两个都需要安装,需要记住安装的位置,一会儿需要设置环境变量。 pip install PyQt5pip install PyQt5 - tools ( DemoProject )E : \WorkSp
    发表于 05-08 09:59 3次下载
    <b class='flag-5'>PyQT</b><b class='flag-5'>开发</b>上位机教程

    使用pycharm开发上位机配置pyqt5的环境

    在上位机的开发过程中,使用QT的图形化界面,是开发上位机最好最简单的选择,因此我将讲述配置pyqt5的环境。 软件安装: 安装:pycharm的社区2021.02版 QT(安装参考https
    发表于 05-29 16:12 0次下载
    使用pycharm<b class='flag-5'>开发</b>上位机配置<b class='flag-5'>pyqt</b>5的环境

    在核桃派上实现USB摄像头的OpenCV颜色检测

    在前几周的文章中已经介绍过如何在核桃派上用OpenCV读取图像并显示到pyqt5的窗口上,这里在上一篇文章的基础上,给开发板加入颜色检测功能,尝试将图像中所有蓝色的东西都用一个框标记出来。
    的头像 发表于 01-20 17:50 490次阅读
    在核桃派上实现USB摄像头的<b class='flag-5'>OpenCV</b>颜色检测