跳转到主要内容

在多种Qt绑定(PyQt5/6和PySide2/6)之上提供抽象层。

项目描述

QtPy: PyQt5/PySide2/PyQt6/PySide6的抽象层

license pypi version conda version download count OpenCollective Backers Join the chat at https://gitter.im/spyder-ide/public
PyPI status Github build status Coverage Status

版权所有 © 2009– Spyder 开发团队

描述

QtPy 是一个小的抽象层,允许您通过单个 API 调用来使用 PyQt 或 PySide 编写应用程序。

它支持使用 Qt5 布局(其中 QtGui 模块已拆分为 QtGui 和 QtWidgets)的 PyQt5、PySide2、PyQt6 和 PySide6。

基本上,您可以像直接使用 PyQt 或 PySide 一样编写代码,但导入 Qt 模块时使用 qtpy 而不是 PyQt5PySide2PyQt6PySide6

相应地,在将代码在不同 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.pyqtSignalQtCore.pyqtSlotQtCore.pyqtProperty(在 PyQt5/6 上可用)分别公开为 QtCore.SignalQtCore.SlotQtCore.Property,遵循 Qt5 模块布局。

  • 可以使用 QtCore.__version__(而不是 QtCore.QT_VERSION_STR)以及从 qtpy.QT_VERSION 来检查正在使用的 Qt 版本。

  • 对于 PyQt6 枚举,已通过提升 QtCoreQtGuiQtTestQtWidgets 模块的枚举添加了无作用域枚举访问。

  • QtGuiQtOpenGL 模块之间添加了兼容性,以用于 QOpenGL* 类。

  • 要检查当前绑定版本,您可以使用 qtpy.PYSIDE_VERSION(用于 PySide2/6)和 qtpy.PYQT_VERSION(用于 PyQt5/6)。如果未使用相应的绑定,则其属性值将为 None

  • 要检查当前选择的绑定,您可以使用 qtpy.API_NAME

  • 有布尔值可以检查是否正在使用 Qt5/6、PyQt5/6 或 PySide2/6:qtpy.QT5qtpy.QT6qtpy.PYQT5qtpy.PYQT6qtpy.PYSIDE2qtpy.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.isdeletedshiboken.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.jsonpyright 部分的配置文件,而不是运行时参数。有关参考,请参阅此处。为了设置此配置,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,并使用 condapip 安装这些绑定。对于 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 绑定的额外包如下

  • PyQt3DPyQt6-3D
  • PyQtChartPyQt6-Charts
  • PyQtDataVisualizationPyQt6-DataVisualization
  • PyQtNetworkAuthPyQt6-NetworkAuth
  • PyQtPurchasing
  • PyQtWebEnginePyQt6-WebEngine
  • QScintillaPyQt6-QScintilla

贡献

欢迎每个人贡献!有关更多详细信息,请参阅我们的贡献指南

赞助商

QtPy 得益于以下慷慨的支持

QuansightNumfocus

以及我们从全球用户通过Open Collective收到的捐赠

Sponsors

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码发行版

QtPy-2.4.1.tar.gz (65.5 kB 查看哈希值)

上传时间 源代码

构建发行版

QtPy-2.4.1-py3-none-any.whl (93.5 kB 查看哈希值)

上传时间 Python 3

由以下支持