MEP23 : plusieurs chiffres par fenêtre d'interface graphique #
Statut #
Discussion
Branches et demandes d'extraction #
Travail précédent - https://github.com/matplotlib/matplotlib/pull/2465
Résumé #
Ajout de la possibilité d'avoir plusieurs chiffres regroupés sous le même
FigureManager
Descriptif détaillé #
Dans la structure actuelle, chaque canevas a sa propre fenêtre.
Ceci est et peut continuer à être la méthode de fonctionnement souhaitée pour la plupart des cas d'utilisation.
Parfois lorsqu'il y a trop de figures ouvertes en même temps, il est souhaitable de pouvoir les regrouper sous une même fenêtre [voir]( https://github.com/matplotlib/matplotlib/issues/2194 ).
La solution proposée modifie FigureManagerBase
pour contenir et gérer plus d'un fichier Canvas
. Le paramètre de configuration rcParams["backend.multifigure"]
contrôle le moment où le comportement MultiFigure est souhaité.
Noter
Il est important de noter que la solution proposée suppose que le [MEP22]( https://github.com/matplotlib/matplotlib/wiki/Mep22 ) est déjà en place. C'est simplement parce que l'implémentation réelle de Toolbar
rend assez difficile le basculement entre les canevas.
Mise en œuvre #
La première implémentation se fera dans GTK3 en utilisant un Notebook comme conteneur de canevas.
FigureManagerBase
#
ajoutera les nouvelles méthodes suivantes
add_canvas
: Pour ajouter un canevas à unFigureManager
objet existantremove_canvas
: Pour supprimer une toile d'unFigureManager
objet, si c'est la dernière, elle sera détruitemove_canvas
: Pour déplacer une toile de l'uneFigureManager
à l'autre.set_canvas_title
: Pour modifier le titre associé à un conteneur de canevas spécifiqueget_canvas_title
: Pour obtenir le titre associé à un conteneur de canevas spécifiqueget_active_canvas
: Pour obtenir le canevas qui est au premier plan et qui est soumis aux événements de l'interface graphique. Il n'y en a passet_active_canvas
car le canevas actif est défini lorsqu'ilshow
est appelé sur unCanvas
objet.
new_figure_manager
#
Pour contrôler lequel FigureManager
contiendra les nouvelles figures, un paramètre optionnel supplémentaire figuremanager sera ajouté, cette valeur de paramètre sera transmise à new_figure_manager_given_figure
.
new_figure_manager_given_figure
#
Si le paramètre figuremanager est donné, cet
FigureManager
objet sera utilisé au lieu d'en créer un nouveau.Si
rcParams['backend.multifigure']
est vrai : le dernierFigureManager
objet sera utilisé au lieu d'en créer un nouveau.
Rétrocompatibilité #
Pour que les propriétés MultiFigure soient visibles, l'utilisateur doit les activer directement en définissantrcParams['backend.multifigure'] =
True
Il devrait être rétrocompatible pour les backends qui adhèrent à la FigureManagerBase
structure actuelle même s'ils n'ont pas encore implémenté la magie MultiFigure .
Alternatives #
Au lieu de modifier le FigureManagerBase
il pourrait être possible d'ajouter une classe parallèle, qui gère les cas où
. Cela garantira qu'il n'y aura pas de problèmes avec les backends personnalisés, mais rendra également le code plus gros et plus de choses à maintenir.rcParams['backend.multifigure'] = True