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 FigureManagerBase
per 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 Toolbar
rende 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_canvas
FigureManager
: Per aggiungere una tela a un oggetto esistenteremove_canvas
: Per rimuovere una tela da unFigureManager
oggetto, se è l'ultima, verrà distruttamove_canvas
: Per spostare una tela da unaFigureManager
all'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_canvas
perché la tela attiva, viene definita quandoshow
viene chiamata su unCanvas
oggetto.
new_figure_manager
#
Per controllare quale FigureManager
conterrà 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:FigureManager
verrà 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 FigureManagerBase
struttura attuale anche se non hanno ancora implementato la magia MultiFigure .
Alternative #
Invece di modificare FigureManagerBase
potrebbe 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