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 FigureManagerBasepour 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 Toolbarrend 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 à unFigureManagerobjet existantremove_canvas: Pour supprimer une toile d'unFigureManagerobjet, 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_canvascar le canevas actif est défini lorsqu'ilshowest appelé sur unCanvasobjet.
new_figure_manager#
Pour contrôler lequel FigureManagercontiendra 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
FigureManagerobjet sera utilisé au lieu d'en créer un nouveau.Si
rcParams['backend.multifigure']est vrai : le dernierFigureManagerobjet 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 FigureManagerBasestructure actuelle même s'ils n'ont pas encore implémenté la magie MultiFigure .
Alternatives #
Au lieu de modifier le FigureManagerBaseil 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