MEP23: Mehrere Figuren pro GUI-Fenster #

Status #

Diskussion

Branches und Pull-Requests #

Vorherige Arbeit - https://github.com/matplotlib/matplotlib/pull/2465 Zum Löschen

Zusammenfassung #

Fügen Sie die Möglichkeit hinzu, mehrere Figuren unter derselben Gruppierung zu haben FigureManager

Detaillierte Beschreibung #

Unter der aktuellen Struktur hat jede Leinwand ein eigenes Fenster.

Dies ist und bleibt für die meisten Anwendungsfälle die gewünschte Arbeitsweise.

Manchmal, wenn zu viele Figuren gleichzeitig geöffnet sind, ist es wünschenswert, diese unter demselben Fenster gruppieren zu können [siehe]( https://github.com/matplotlib/matplotlib/issues/2194 ).

Die vorgeschlagene Lösung wird geändert FigureManagerBase, um mehr als eine zu enthalten und zu verwalten Canvas. Die Einstellungsparameter rcParams["backend.multifigure"]steuern, wann das MultiFigure- Verhalten gewünscht wird.

Notiz

Es ist wichtig zu beachten, dass die vorgeschlagene Lösung davon ausgeht, dass [MEP22]( https://github.com/matplotlib/matplotlib/wiki/Mep22 ) bereits vorhanden ist. Dies liegt einfach daran, dass die eigentliche Implementierung des Toolbares ziemlich schwierig macht, zwischen Leinwänden zu wechseln.

Implementierung #

Die erste Implementierung erfolgt in GTK3 mit einem Notebook als Canvas-Container.

FigureManagerBase#

fügt die folgenden neuen Methoden hinzu

  • add_canvas: Zum Hinzufügen einer Leinwand zu einem vorhandenen FigureManagerObjekt

  • remove_canvas: Um eine Leinwand von einem FigureManagerObjekt zu entfernen, wenn es die letzte ist, wird sie zerstört

  • move_canvas: Zum Verschieben einer Leinwand von einer FigureManager zur anderen.

  • set_canvas_title: Zum Ändern des mit einem bestimmten Canvas-Container verknüpften Titels

  • get_canvas_title: Zum Abrufen des Titels, der einem bestimmten Canvas-Container zugeordnet ist

  • get_active_canvas: Um die Leinwand zu erhalten, die sich im Vordergrund befindet und den GUI-Ereignissen unterliegt. Es gibt keine set_active_canvas , da die aktive Leinwand definiert wird, wenn ein Objekt showaufgerufen wird.Canvas

new_figure_manager#

Um zu steuern, welche FigureManagerdie neuen Figuren enthalten, wird ein zusätzlicher optionaler Parameter figuremanager hinzugefügt, dieser Parameterwert wird an übergeben new_figure_manager_given_figure.

new_figure_manager_given_figure#

  • Wenn der Parameter figuremanager angegeben ist, wird dieses FigureManagerObjekt verwendet, anstatt ein neues zu erstellen.

  • Wenn rcParams['backend.multifigure']wahr: Das letzte FigureManagerObjekt wird verwendet, anstatt ein neues zu erstellen.

Abwärtskompatibilität #

Damit die MultiFigure- Eigenschaften sichtbar sind, muss der Benutzer sie direkt aktivierenrcParams['backend.multifigure'] = True

Es sollte abwärtskompatibel für Backends sein, die sich an die aktuelle FigureManagerBaseStruktur halten, auch wenn sie die MultiFigure- Magie noch nicht implementiert haben.

Alternativen #

Anstatt die zu ändern FigureManagerBase, könnte es möglich sein, eine parallele Klasse hinzuzufügen, die die Fälle behandelt, in denen . Dies garantiert, dass es keine Probleme mit benutzerdefinierten Backends gibt, macht aber auch den Code größer und es müssen mehr Dinge gewartet werden.rcParams['backend.multifigure'] = True