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 Toolbar
es 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 vorhandenenFigureManager
Objektremove_canvas
: Um eine Leinwand von einemFigureManager
Objekt zu entfernen, wenn es die letzte ist, wird sie zerstörtmove_canvas
: Zum Verschieben einer Leinwand von einerFigureManager
zur anderen.set_canvas_title
: Zum Ändern des mit einem bestimmten Canvas-Container verknüpften Titelsget_canvas_title
: Zum Abrufen des Titels, der einem bestimmten Canvas-Container zugeordnet istget_active_canvas
: Um die Leinwand zu erhalten, die sich im Vordergrund befindet und den GUI-Ereignissen unterliegt. Es gibt keineset_active_canvas
, da die aktive Leinwand definiert wird, wenn ein Objektshow
aufgerufen wird.Canvas
new_figure_manager
#
Um zu steuern, welche FigureManager
die 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
FigureManager
Objekt verwendet, anstatt ein neues zu erstellen.Wenn
rcParams['backend.multifigure']
wahr: Das letzteFigureManager
Objekt 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 FigureManagerBase
Struktur 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