matplotlib.backends.backend_qtagg, matplotlib.backends.backend_qtcairo#
注意 这些 后端 在这里没有(自动)记录,以避免在构建文档时添加依赖项。
Qt 绑定#
目前有2个活跃支持的Qt版本,Qt5和Qt6,每个版本有两个支持的Python绑定 -- 针对Qt5的 PyQt5 和 PySide2 以及针对Qt6的 PyQt6 和 PySide6 [1]. Matplotlib的qtagg和qtcairo后端(matplotlib.backends.backend_qtagg 和 matplotlib.backend.backend_qtcairo)支持所有这些绑定,公共部分在 matplotlib.backends.backend_qt 模块中提取。
在运行时,这些后端按以下方式选择实际使用的绑定:
如果一个绑定的
QtCore子包已经被导入,那么该绑定将被选中(检查顺序为PyQt6、PySide6、PyQt5、PySide2)。如果
QT_API环境变量被设置为 "PyQt6"、"PySide6"、"PyQt5"、"PySide2" 中的一个(不区分大小写),则选择该绑定。(另请参阅关于 环境变量 的文档。)否则,将按顺序
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_qtagg 或 backend_qtcairo。然而,这些模块在我们放弃对 Qt5 的支持之前不会被弃用。
虽然 PyQt 和 Qt for Python(又名 PySide)都紧密反映了它们所封装的底层 C++ API,但它们并不是彼此的直接替代品 [2]。为了应对这种情况,Matplotlib 在 matplotlib.backends.qt_compat 中有一个内部 API 兼容层,涵盖了我们的需求。尽管这是一个公共模块,我们并不认为它是一个稳定的面向用户的 API,它可能会在没有警告的情况下发生变化 [3]。