pyqt打包和兼容问题
对比选择阶段
现阶段打算开发一个跨平台应用,在Electron框架与PyQt框架之间选择使用PyQt框架。主要原因之一是由于只需掌握Python编程基础即可。
pyqt的缺点
originally, pyqt has its own background. not developed by qt's company, now, qt's company also offers a python-based solution. at first, i was confused about which one to use. when browsing through the documentation, be cautious of the similarities and differences between the two sets of resources.
2、pyqt的文档写得十分的粗糙,很多都是todo的,只能通过名字去理解
3、pyqt的文档说明部分全部都是复制了qt的内容,所以理解起来有点懵
基于前两点存在的问题, 我们需要打开Qt的相关文档, 因为Qt官方文档内容详实且全面. 在PyQt模块中查找是否有对应的实现, 如果存在则可以直接参考其源代码进行编写; 对于无法直接找到对应功能的情况,默认采用Python的方式来处理. 例如, Py Qt模块中并没有提供QString类, 因此我们通常会采用Python中的string处理方法来替代
5、pyqt是用pyinstaller来打包的,我的大部分问题都来自pyinstaller的。
pyinstaller的打包注意点
在Windows和Mac上分别打包才能获得相应的应用,在Windows上使用--onefile选项时会直接生成一个.exe文件,在Mac上则会生成一个.app后缀的文件。实际上这个看似像是一个文件夹的东西其实只是一个文件夹。
当遇到调试需求或闪退问题时
- 在mac系统中存储long类型的时间不会有太大问题。然而,在window环境下运行时可能会出现错误提示:当时间超出该类型所能表示的最大值时(通常为2^63-1),系统会抛出溢出异常。尽管我的机器配置以及使用的类库都是64位的(支持64位长整型),这依然让我感到困惑。因此必须改用string类型来存储
基于第一条原因,在Windows平台使用QDir.currentPath()会返回与预期不同的结果;它会在Windows系统中显示当前程序所在的目录位置;而在macOS平台上则会显示空路径("/")。为了获取应用的实际位置信息,则可以通过调用QCoreApplication.applicationDirPath()方法,则可以在macOS平台上获得应用所在文件夹的位置;因此需要注意的是,在macOS系统中如果想要将文件移动到当前运行的应用目录下,则可以通过检查QCoreApplication.applicationDirPath()返回的结果中是否包含"MacOS"字符串来判断;如果有则需要截断路径长度,并设置为截断后的部分作为新的工作目录位置。
总结
跨平台不容易实现那么原生的效果如此理想状态的方案也并不存在每个解决方案都各有各的优势与不足需要具体情况具体分析还存在许多尚未解决的技术难题
