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- FigureManagerzur 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