Qt for Python 6.8:现已发布!
我们非常高兴地宣布 Qt for Python 6.8 的最新发布。每发布一个新版本,我们都会尝试利用Qt的新功能和新的流行理念带来新的惊喜。为方便起见,您可以查看Qt for Python6.8中的新功能和改进功能,以及整个变更日志:https://code.qt.io/cgit/pyside/pyside-setup.git/tree/doc/changelogs/changes-6.8.0(浏览器复制打开)。
在每个版本中,Qt for Python团队都努力在错误修复、功能开发和全新想法之间取得良好的平衡。在此版本中,您将看到一些与改进我们当前产品相关的更改,例如更改 Python可调用的信号连接,为移除Python的GIL做准备,扩展对懒加载的支持以包括智能指针和嵌套类型,以及其他一些小的修复。
我们想重点介绍团队投入时间最多的几项主要任务。
1
Qt Design Studio兼容性
您听说了吗?您现在可以使用Python后端轻松运行QtDS项目了!
如果您还没有了解,请查看我们之前的博文,其中介绍了QtDS中的新导出功能,以及新的PySide6_DS包,其中包含了专属的QtQuick组件。此外,您还可以使用 pyside6-deploy部署带有Python后端的Design Studio项目。导出项目后,只需使用安装了PySide6的Python环境,在导出的项目中运行以下命令即可:
pyside6-deploy Python/main.py
2
减少二进制文件大小
封装Qt库可能会在性能方面带来开销,还会影响安装的大小。在此版本中,我们将二进制大小减少了约10%,但我们相信还有更大的可能,因此我们仍在致力于此项工作。
换个角度来看,对于Linux上的QtCore,Qt二进制文件约为6.8MB,封装二进制文件约为4.4MB。这意味着,如果您要使用PySide中的QtCore,大约需要11.2MB,考虑到应用程序的部署,这可能是嵌入式系统甚至桌面应用程序的一个问题。
我们注意到一些字符串可以被压缩,其他字符串甚至可以被移除,但我们仍在努力将大小进一步缩小,并设法为Qt二进制文件提供一个轻量级封装。
3
改进我们的Python存根(类型提示)
一些系统性的问题来自Shiboken类型系统中一些dunder 方法的返回类型,它们使用了通用的PyObject*而不是 str。在某些情况下,mypy无法处理重载链中不一致的静态方法。
大部分更新的文件都是我们的示例和教程,其中mypy需要几个小版本之前引入的新枚举才能正确处理这些代码行,即使我们出于兼容性目的而设置了容错模式(例如,我们应该使用Qt.Orientation.Horizonal,而不是 Qt.Horizontal)。
许多关于输入的旧Bug也得到了修复,但在未来的版本中仍有一些问题需要解决。
4
动态绑定研究
在过去的几个月中,我们一直在研究简化绑定生成过程的方法,更确切地说,是依靠QMetaObject为QObject提供 Python动态绑定。这包括使用QMetaType转换函数参数类型的机制,以及使用自定义转换器扩展其他类型的机制。
这是一个棘手的主题,您需要从Qt方面、CPython方面以及C++方面解决许多细节问题,因此您可以理解,找到适当的平衡可能具有挑战性。
需要做更多工作的一个特定主题是对象所有权的概念,我们已经通过Shiboken解决了这个问题,但这个项目是全新的。我们可以重用其中的一些逻辑,但我们希望避免与当前的产品过于紧密。
我们希望很快在后续博客中讨论这一主题,主要是因为它提供了一种更简单的方法来在Qt/C++应用程序中启用脚本功能。
5
PySide6 Flatpak Baseapp介绍
虽然不是6.8版独有,但我们一直在努力开发PySide6的Flatpak baseapp。这将使PySide6 Linux开发人员能够毫不费力地使用PySide6创建Flatpak应用程序。
基于强大的KDE SDK构建,baseapp预装了PySide6库,使开发比以往任何时候都更加顺畅。
目前,baseapp只支持PySide6 6.7.3,并且可以在Flathub上随时可用。一旦KDE运行时将Qt版本更新到6.8.0后,baseapp将立即更新到PySide6 6.8.0。
要开始使用,只需运行以下命令:
flatpak install flathub io.qt.PySide6.BaseApp//6.7
有关使用baseapp创建自己的PySide6应用程序的深入指南,请查看KDE开发人员文档中的精彩教程:https://develop.kde.org/docs/getting-started/python/
6
适用于PySide6 的Android Wheels
随着PySide6 6.8的发布,您现在可以下载PySide6的 Android轮(预构建的组件和库),它与`pyside6-android-deploy`CLI工具无缝集成。这使得为Android 架构打包PySide6应用程序变得更加容易。在此之前,开发人员必须自己完成交叉编译Android PySide6二进制文件的繁琐过程。这通常被证明是一项具有挑战性且耗时的任务。但是现在,有了预构建的PySide6 Android轮子,这一过程将比以往任何时候都更加简化和方便。
要开始使用,您可以从Qt for Python官方发布页面下载 Android轮子:https://download.qt.io/official_releases/QtForPython/pyside6/
另外,您可以使用即将发布(0.1.4)的qtpip直接下载轮子。
qtpip download PySide6 --android --arch aarch64
可以下载aarch64轮子,或x86_64轮子
qtpip将输出下载轮子的路径,然后您可以使用 `pyside6-android-deploy`工具打包您的PySide6 Android应用程序。
pyside6-android-deploy--wheel-pyside=<path_to_pyside6_wheel>--wheel-shiboken=<;path_too_shiboken_wheel> --name <application_name> --ndk-path=<downloaded_ndk_path> --sdk-path=<downloaded_sdk_path>
要了解如何使用pyside6-android-deploy,请参阅官方文档。
新工具:Pyside6-svgtoqml
PySide6对应于svgtoqml工具,可用于将SVG文档转换为QML文件,以便在QtQuick应用程序中使用。
pyside6-svgtoqml <svg_file_to_read> <qml_file_to_write>
7
未来计划
在接下来的版本中,我们将专注于改进现有产品,但同时我们也将在工具方面投入更多精力,以简化PySide开发人员的编程决策,同时我们也将探索与Python交互的新方式。
关于最后一个主题,我们一直在研究一些简化Qt和 Python开发的方法,主要是为了在编写简单应用程序时减少模板代码的数量,同时也是为了提供一种更加独立的机制来为UI添加逻辑。
END
往期推荐