On this page
backend_qtagg, backend_qtcairo
NOTE These backends are not (auto) documented here, to avoid adding a dependency to building the docs.
Qt Bindings
There are currently 2 actively supported Qt versions, Qt5 and Qt6, and two supported Python bindings per version -- PyQt5 and PySide2 for Qt5 and PyQt6 and PySide6 for Qt6 [1]. While both PyQt and Qt for Python (aka PySide) closely mirror the underlying C++ API they are wrapping, they are not drop-in replacements for each other [2]. To account for this, Matplotlib has an internal API compatibility layer in matplotlib.backends.qt_compat
which covers our needs. Despite being a public module, we do not consider this to be a stable user-facing API and it may change without warning [3].
Previously Matplotlib's Qt backends had the Qt version number in the name, both in the module and the rcParams["backend"]
value (e.g. matplotlib.backends.backend_qt4agg
and matplotlib.backends.backend_qt5agg
). However as part of adding support for Qt6 we were able to support both Qt5 and Qt6 with a single implementation with all of the Qt version and binding support handled in qt_compat
. A majority of the renderer agnostic Qt code is now in matplotlib.backends.backend_qt
with specialization for AGG in backend_qtagg
and cairo in backend_qtcairo
.
The binding is selected at run time based on what bindings are already imported (by checking for the QtCore
sub-package), then by the QT_API
environment variable, and finally by the rcParams["backend"]
. In all cases when we need to search, the order is PyQt6
, PySide6
, PyQt5
, PySide2
. See How do I select the Qt implementation? for usage instructions.
The backend_qt5
, backend_qt5agg
, and backend_qt5cairo
are provided and force the use of a Qt5 binding for backwards compatibility. Their use is discouraged (but not deprecated) and backend_qt
, backend_qtagg
, or backend_qtcairo
should be preferred instead. However, these modules will not be deprecated until we drop support for Qt5.
© 2012–2023 Matplotlib Development Team. All rights reserved.
Licensed under the Matplotlib License Agreement.
https://matplotlib.org/3.6.0/api/backend_qt_api.html