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:Could not load the Qt platform plugin “xcb”
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !