在多种Qt绑定(PyQt5/6和PySide2/6)之上提供抽象层。
项目描述
QtPy: PyQt5/PySide2/PyQt6/PySide6的抽象层
版权所有 © 2009– Spyder 开发团队
描述
QtPy 是一个小的抽象层,允许您通过单个 API 调用来使用 PyQt 或 PySide 编写应用程序。
它支持使用 Qt5 布局(其中 QtGui 模块已拆分为 QtGui 和 QtWidgets)的 PyQt5、PySide2、PyQt6 和 PySide6。
基本上,您可以像直接使用 PyQt 或 PySide 一样编写代码,但导入 Qt 模块时使用 qtpy
而不是 PyQt5
、PySide2
、PyQt6
或 PySide6
。
相应地,在将代码在不同 Qt 绑定(PyQt 与 PySide)或 Qt 版本(Qt5 与 Qt6)之间移植时,QtPy 使这一过程变得更加容易,并允许您轻松地逐步在这两者之间过渡。QtPy 在您的项目运行的同时为您处理绑定或 Qt 版本之间的不兼容性和差异,因此您可以更多地关注自己的代码,而不是追踪支持每个 Qt 版本和绑定。此外,当您确实想要升级或支持新的绑定时,它允许您按模块更新项目而不是一次性更新。您可以在使用 QtPy 的项目中查看这种方法的应用示例,如 git-cola。
署名和致谢
本项目基于 pyqode.qt 项目和来自 Spyder 项目的 spyderlib.qt 模块,并且还包括来自 qt-helpers 的贡献,这些贡献是作为 glue 项目的一部分开发的。
与 pyqode.qt
不同,这不是一个命名空间包,因此它与特定项目或命名空间无关。
许可证
本项目遵循 MIT 许可协议 发布。
要求
您需要在系统中安装 PyQt5、PySide2、PyQt6 或 PySide6 才能使用 QtPy。如果找到这些包中的多个,则默认使用 PyQt5,除非您设置了 QT_API
环境变量。
QT_API
可以取以下值
pyqt5
(使用 PyQt5)。pyside2
(使用 PySide2)。pyqt6
(使用 PyQt6)。pyside6
(使用 PySide6)。
模块别名和常量
-
QtCore.pyqtSignal
、QtCore.pyqtSlot
和QtCore.pyqtProperty
(在 PyQt5/6 上可用)分别公开为QtCore.Signal
、QtCore.Slot
和QtCore.Property
,遵循 Qt5 模块布局。 -
可以使用
QtCore.__version__
(而不是QtCore.QT_VERSION_STR
)以及从qtpy.QT_VERSION
来检查正在使用的 Qt 版本。 -
对于 PyQt6 枚举,已通过提升
QtCore
、QtGui
、QtTest
和QtWidgets
模块的枚举添加了无作用域枚举访问。 -
在
QtGui
和QtOpenGL
模块之间添加了兼容性,以用于QOpenGL*
类。 -
要检查当前绑定版本,您可以使用
qtpy.PYSIDE_VERSION
(用于 PySide2/6)和qtpy.PYQT_VERSION
(用于 PyQt5/6)。如果未使用相应的绑定,则其属性值将为None
。 -
要检查当前选择的绑定,您可以使用
qtpy.API_NAME
-
有布尔值可以检查是否正在使用 Qt5/6、PyQt5/6 或 PySide2/6:
qtpy.QT5
、qtpy.QT6
、qtpy.PYQT5
、qtpy.PYQT6
、qtpy.PYSIDE2
和qtpy.PYSIDE6
。如果当前正在使用,则为True
,否则为False
。
兼容模块
在 qtpy.compat
模块中,您可以找到 QFileDialog
静态方法的包装器和 SIP/Shiboken 函数的包装器,例如
-
QFileDialog.getExistingDirectory
通过qtpy.compat.getexistingdirectory
包装 -
QFileDialog.getOpenFileName
通过qtpy.compat.getopenfilename
包装 -
QFileDialog.getOpenFileNames
通过qtpy.compat.getopenfilenames
包装 -
QFileDialog.getSaveFileName
通过qtpy.compat.getsavefilename
包装 -
sip.isdeleted
和shiboken.isValid
通过qtpy.compat.isalive
包装
安装
pip install qtpy
或
conda install qtpy
类型检查器集成
类型检查器不了解已安装的包,因此这些工具需要额外的配置。
提供了一个命令行界面(CLI),以帮助使用 QtPy(获取 MyPy 和 Pyright/Pylance 参数/配置)。
Mypy
mypy-args
命令可以帮助您生成 Mypy 的命令行参数,以便它可以使用与 QtPy 本身选择的相同 API 处理 QtPy 源文件。
如果您运行
qtpy mypy-args
QtPy 将输出一个字符串,该字符串将反映当前选择的 Qt API。例如,在已安装并选择了 PyQt5 的环境中(或者在没有在环境中找到绑定时的默认回退),这将输出以下内容
--always-true=PYQT5 --always-false=PYSIDE2 --always-false=PYQT6 --always-false=PYSIDE6
使用 Bash 或类似 shell,可以将其注入到 Mypy 命令行调用中,如下所示
mypy --package mypackage $(qtpy mypy-args)
Pyright/Pylance
对于 Pyright,需要创建一个名为 pyrightconfig.json
或 pyright
部分的配置文件,而不是运行时参数。有关参考,请参阅此处。为了设置此配置,QtPy 提供了 pyright-config
命令进行指导。
如果您运行
qtpy pyright-config
您将获得包含在您的项目文件中的必要配置。如果您没有它们,建议创建后者。例如,在已安装并选择了 PyQt5 的环境中(或者在没有在环境中找到绑定时的默认回退),这将输出以下内容
pyrightconfig.json:
{"defineConstant": {"PYQT5": true, "PYSIDE2": false, "PYQT6": false, "PYSIDE6": false}}
pyproject.toml:
[tool.pyright.defineConstant]
PYQT5 = true
PYSIDE2 = false
PYQT6 = false
PYSIDE6 = false
注意:这些配置对于在您的源代码中使用 QtPy 正确使用默认 VSCode 的类型检查功能是必要的。
测试矩阵
目前,QtPy 在 Linux、Windows 和 macOS 上为不同的绑定运行测试,使用 Python 3.7 和 3.11,并使用 conda
和 pip
安装这些绑定。对于 PyQt 绑定,我们还会通过 pip
检查额外包的安装。
在此基础上,当前的测试矩阵看起来如下所示
Python | 3.7 | 3.11 | |||
---|---|---|---|---|---|
OS | 绑定/管理器 | conda | pip | conda | pip |
Linux | PyQt5 | 5.12 | 5.15 | 5.15 | 5.15(带有额外内容) |
PyQt6 | 跳过(不可用) | 6.3 | 跳过(不可用) | 6.5(带有额外内容) | |
PySide2 | 5.13 | 5.12 | 5.15 | 跳过(没有可用的 wheel) | |
PySide6 | 6.4 | 6.3 | 6.5 | 6.5 | |
Windows | PyQt5 | 5.9 | 5.15 | 5.15 | 5.15(带有额外内容) |
PyQt6 | 跳过(不可用) | 6.2 | 跳过(不可用) | 6.5(带有额外内容) | |
PySide2 | 5.13 | 5.12 | 5.15 | 跳过(没有可用的 wheel) | |
PySide6 | 跳过(6.4 的测试挂起,6.5 不可用) | 6.2 | 6.5 | 6.5 | |
MacOS | PyQt5 | 5.12 | 5.15 | 5.15 | 5.15(带有额外内容) |
PyQt6 | 跳过(不可用) | 6.3 | 跳过(不可用) | 6.5(带有额外内容) | |
PySide2 | 5.13 | 5.12 | 5.15 | 跳过(没有可用的 wheel) | |
PySide6 | 6.4 | 6.3 | 6.5 | 6.5 |
注意:提到的 PyQt 绑定的额外包如下
PyQt3D
和PyQt6-3D
PyQtChart
和PyQt6-Charts
PyQtDataVisualization
和PyQt6-DataVisualization
PyQtNetworkAuth
和PyQt6-NetworkAuth
PyQtPurchasing
PyQtWebEngine
和PyQt6-WebEngine
QScintilla
和PyQt6-QScintilla
贡献
欢迎每个人贡献!有关更多详细信息,请参阅我们的贡献指南。
赞助商
QtPy 得益于以下慷慨的支持
以及我们从全球用户通过Open Collective收到的捐赠
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码发行版
构建发行版
QtPy-2.4.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a5a15ffd519550a1361bdc56ffc07fda56a6af7292f17c7b395d4083af632987 |
|
MD5 | 9a4ed88d2b16b3e660265881430c4779 |
|
BLAKE2b-256 | eb9a7ce646daefb2f85bf5b9c8ac461508b58fa5dcad6d40db476187fafd0148 |
QtPy-2.4.1-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1c1d8c4fa2c884ae742b069151b0abe15b3f70491f3972698c683b8e38de839b |
|
MD5 | 14150c2fbc09ccb10e3db92e0273eab7 |
|
BLAKE2b-256 | 7ea92146d5117ad8a81185331e0809a6b48933c10171f5bac253c6df9fce991c |