matplotlib.backends.backend_qtagg, matplotlib.backends.backend_qtcairo#

注意 这些 后端 未在此处(自动)记录,以避免增加构建文档的依赖。

Qt 绑定#

目前有 2 个积极支持的 Qt 版本,Qt5 和 Qt6,以及每个版本支持的两个 Python 绑定——Qt5 的 PyQt5PySide2,以及 Qt6 的 PyQt6PySide6 [1]。Matplotlib 的 qtagg 和 qtcairo 后端(matplotlib.backends.backend_qtaggmatplotlib.backend.backend_qtcairo)支持所有这些绑定,其通用部分在 matplotlib.backends.backend_qt 模块中进行了提炼。

在运行时,这些后端按如下方式选择实际使用的绑定:

  1. 如果某个绑定的 QtCore 子包已被导入,则选择该绑定(检查顺序为 PyQt6, PySide6, PyQt5, PySide2)。

  2. 如果 QT_API 环境变量被设置为 "PyQt6"、"PySide6"、"PyQt5"、"PySide2"(不区分大小写)中的一个,则选择该绑定。(另请参阅环境变量的文档。)

  3. 否则,按 PyQt6, PySide6, PyQt5, PySide2 的顺序选择第一个可用的后端。

过去,Matplotlib 曾为每个 Qt 版本提供独立的后端(例如 qt4agg/matplotlib.backends.backend_qt4agg 和 qt5agg/matplotlib.backends.backend_qt5agg)。在添加对 Qt6 的支持时,此方案被弃用。为了向后兼容,qt5agg/backend_qt5agg 和 qt5cairo/backend_qt5cairo 仍然可用;选择其中一个后端会强制使用 Qt5 绑定。不鼓励使用它们,而应优先使用 backend_qtaggbackend_qtcairo。然而,在我们放弃对 Qt5 的支持之前,这些模块不会被弃用。

虽然 PyQt 和 Qt for Python (即 PySide) 都紧密模仿了它们所封装的底层 C++ API,但它们并非彼此的直接替代品 [2]。考虑到这一点,Matplotlib 在 matplotlib.backends.qt_compat 中设有一个内部 API 兼容层,以满足我们的需求。尽管这是一个公共模块,但我们不认为它是一个稳定的面向用户的 API,它可能会在不发出警告的情况下发生变化 [3]