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 à un FigureManagerobjet existant

  • remove_canvas: Pour supprimer une toile d'un FigureManagerobjet, si c'est la dernière, elle sera détruite

  • move_canvas: Pour déplacer une toile de l'une FigureManager à l'autre.

  • set_canvas_title: Pour modifier le titre associé à un conteneur de canevas spécifique

  • get_canvas_title: Pour obtenir le titre associé à un conteneur de canevas spécifique

  • get_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 pas set_active_canvas car le canevas actif est défini lorsqu'il showest appelé sur un Canvasobjet.

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 dernier FigureManagerobjet 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