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 esistenteremove_canvas: Per rimuovere una tela da unFigureManageroggetto, se è l'ultima, verrà distruttamove_canvas: Per spostare una tela da unaFigureManagerall'altra.set_canvas_title: Per modificare il titolo associato a uno specifico contenitore canvasget_canvas_title: Per ottenere il titolo associato a uno specifico contenitore canvasget_active_canvas: Per ottenere la tela che è in primo piano ed è soggetta agli eventi gui. Non c'èset_active_canvasperché la tela attiva, viene definita quandoshowviene chiamata su unCanvasoggetto.
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 figuremanager
FigureManager, 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