MEP23: Figure multiple per finestra GUI #

Stato n.

Discussione

Filiali e Pull request #

Lavoro precedente - https://github.com/matplotlib/matplotlib/pull/2465 To-delete

Estratto n.

Aggiungi la possibilità di avere più figure raggruppate sotto la stessa FigureManager

Descrizione dettagliata #

Sotto la struttura attuale, ogni tela ha la sua finestra.

Questo è e potrebbe continuare ad essere il metodo operativo desiderato per la maggior parte dei casi d'uso.

A volte, quando ci sono troppe figure aperte contemporaneamente, è desiderabile poterle raggruppare sotto la stessa finestra [vedi]( https://github.com/matplotlib/matplotlib/issues/2194 ).

La soluzione proposta si modifica FigureManagerBaseper contenere e gestire più di un file Canvas. Il parametro delle impostazioni rcParams["backend.multifigure"]controlla quando si desidera il comportamento MultiFigure .

Nota

È importante notare che la soluzione proposta presuppone che [MEP22]( https://github.com/matplotlib/matplotlib/wiki/Mep22 ) sia già in atto. Questo semplicemente perché l'effettiva implementazione di Toolbarrende piuttosto difficile passare da un'area all'altra.

Implementazione n.

La prima implementazione verrà eseguita in GTK3 utilizzando un Notebook come contenitore canvas.

FigureManagerBase#

aggiungerà i seguenti nuovi metodi

  • add_canvasFigureManager: Per aggiungere una tela a un oggetto esistente

  • remove_canvas: Per rimuovere una tela da un FigureManageroggetto, se è l'ultima, verrà distrutta

  • move_canvas: Per spostare una tela da una FigureManager all'altra.

  • set_canvas_title: Per modificare il titolo associato a uno specifico contenitore canvas

  • get_canvas_title: Per ottenere il titolo associato a uno specifico contenitore canvas

  • get_active_canvas: Per ottenere la tela che è in primo piano ed è soggetta agli eventi gui. Non c'è set_active_canvas perché la tela attiva, viene definita quando showviene chiamata su un Canvasoggetto.

new_figure_manager#

Per controllare quale FigureManagerconterrà le nuove figure, verrà aggiunto un ulteriore parametro opzionale figuremanager , questo valore di parametro verrà passato a new_figure_manager_given_figure.

new_figure_manager_given_figure#

  • Se viene fornito il parametro figuremanagerFigureManager , questo oggetto verrà utilizzato invece di crearne uno nuovo.

  • Se rcParams['backend.multifigure']è vero: FigureManagerverrà utilizzato l'ultimo oggetto invece di crearne uno nuovo.

Compatibilità con le versioni precedenti #

Affinché le proprietà MultiFigure siano visibili, l'utente deve attivarle direttamente impostandorcParams['backend.multifigure'] = True

Dovrebbe essere retrocompatibile per i backend che aderiscono alla FigureManagerBasestruttura attuale anche se non hanno ancora implementato la magia MultiFigure .

Alternative #

Invece di modificare FigureManagerBasepotrebbe essere possibile aggiungere una classe parallela, che gestisca i casi in cui . Ciò garantirà che non ci saranno problemi con i backend personalizzati, ma rende anche più grande il codice e più cose da mantenere.rcParams['backend.multifigure'] = True