pyqt打包和兼容问题

it2022-05-05  115

对比选择阶段

近段时间需要做个跨平台的应用,在electron和pyqt中,选择了pyqt,毕竟pyqt的程序小一点,而且只要懂python就好了。

pyqt的缺点

1、pyqt其实是有段故事的,其实pyqt不是qt的公司开发的,qt的公司现在也是开发了一套python的。一开始我也混乱了,所以看文档的时候要小心,两份文档极其相似,但有部分不一样。

2、pyqt的文档写得十分的粗糙,很多都是todo的,只能通过名字去理解

3、pyqt的文档说明部分全部都是复制了qt的内容,所以理解起来有点懵

4、由于2、3点的问题,所以应该打开qt的文档,因为qt的文档很丰富齐全,在pyqt的文档中,找找有没有这样的函数,对着qt的代码写就好了,遇到qt有,但pyqt没有的函数,那基本上都是按照python的来写就好了,例如:pyqt是没有QString类的,pyqt使用的是python的string处理方法就好了。再不懂就搜索一下。

5、pyqt是用pyinstaller来打包的,我的大部分问题都来自pyinstaller的。

pyinstaller的打包注意点

1、需要在window和mac上分别打包才能得到对应平台的应用,在window上使用--onefile的话,直接就是一个exe了,但在mac上得到的是一个.app后缀的文件,这个其实是一个文件夹

2、如果需要调试或者出现闪退的问题,可以不用--onefile,直接打包就好了,这样就会出现命令行,在命令行里会打印出错误信息

3、在mac上保存long类型的时间是不会有问题的,但在window上就可能会报错,说超出了long的长度,但我的机器和类库都是64位,这个很奇怪,所以只能使用string来保存了

4、由于第1点的原因,如果使用QDir.currentPath()得到的结果是不一样的,在window上得到的是exe当前运行的目录路径,但在mac上得到的是”/“的路径,如果用QCoreApplication.applicationDirPath() 就可以知道,在mac上得到的是xxx.app里面的路径,所以这个要注意,如果想把文件放到当前的运行的路径,就要判断是不是在mac上,通过判断QCoreApplication.applicationDirPath()里面有没有MacOS字符串就好了,如果有就把路径截断,之后再QDir.setCurrentDir("截断的路径")这样把当前路径设置成正确的位置,再运行,才可以。

总结

跨平台很难做到原生那么好,哪个解决方案都有自己的优缺点,还有很多坑要踩。


最新回复(0)