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

HINWEIS Diese Backends werden hier nicht (automatisch) dokumentiert, um eine Abhängigkeit beim Erstellen der Dokumentation zu vermeiden.

Qt-Bindings#

Derzeit gibt es 2 aktiv unterstützte Qt-Versionen, Qt5 und Qt6, und zwei unterstützte Python-Bindings pro Version – PyQt5 und PySide2 für Qt5 und PyQt6 und PySide6 für Qt6 [1]. Matplotlibs qtagg- und qtcairo-Backends (matplotlib.backends.backend_qtagg und matplotlib.backend.backend_qtcairo) unterstützen alle diese Bindings, wobei gemeinsame Teile im Modul matplotlib.backends.backend_qt ausgelagert sind.

Zur Laufzeit wählen diese Backends das tatsächlich verwendete Binding wie folgt aus

  1. Wenn das QtCore-Unterpaket eines Bindings bereits importiert ist, wird dieses Binding ausgewählt (die Reihenfolge der Prüfung ist PyQt6, PySide6, PyQt5, PySide2).

  2. Wenn die Umgebungsvariable QT_API auf "PyQt6", "PySide6", "PyQt5", "PySide2" (Groß-/Kleinschreibung wird nicht beachtet) gesetzt ist, wird dieses Binding ausgewählt. (Siehe auch die Dokumentation zu Umgebungsvariablen.)

  3. Andernfalls wird der erste verfügbare Backend in der Reihenfolge PyQt6, PySide6, PyQt5, PySide2 ausgewählt.

Früher hatte Matplotlib separate Backends für jede Qt-Version (z. B. qt4agg/matplotlib.backends.backend_qt4agg und qt5agg/matplotlib.backends.backend_qt5agg). Dieses Schema wurde mit der Einführung der Unterstützung für Qt6 eingestellt. Aus Gründen der Abwärtskompatibilität bleiben qt5agg/backend_qt5agg und qt5cairo/backend_qt5cairo verfügbar; die Auswahl eines dieser Backends erzwingt die Verwendung eines Qt5-Bindings. Ihre Verwendung wird nicht empfohlen, und stattdessen sollten backend_qtagg oder backend_qtcairo bevorzugt werden. Diese Module werden jedoch nicht als veraltet markiert, bis die Unterstützung für Qt5 eingestellt wird.

Obwohl sowohl PyQt als auch Qt for Python (auch bekannt als PySide) die zugrunde liegende C++-API, die sie umschließen, eng nachbilden, sind sie keine Drop-in-Ersetzungen füreinander [2]. Um dies zu berücksichtigen, verfügt Matplotlib über eine interne API-Kompatibilitätsschicht in matplotlib.backends.qt_compat, die unsere Bedürfnisse abdeckt. Obwohl es sich um ein öffentliches Modul handelt, betrachten wir dies nicht als stabile, benutzerorientierte API und es kann sich ohne Vorwarnung ändern [3].