MEP23: Múltiples figuras por ventana GUI #
Estado #
Discusión
Sucursales y solicitudes de extracción #
Trabajo anterior : https://github.com/matplotlib/matplotlib/pull/2465 Para eliminar
Resumen #
Agregue la posibilidad de tener múltiples figuras agrupadas bajo el mismo
FigureManager
Descripción detallada #
Bajo la estructura actual, cada lienzo tiene su propia ventana.
Este es y puede seguir siendo el método de operación deseado para la mayoría de los casos de uso.
A veces, cuando hay demasiadas figuras abiertas al mismo tiempo, es deseable poder agruparlas en la misma ventana [ver] ( https://github.com/matplotlib/matplotlib/issues/2194 ).
La solución propuesta se modifica FigureManagerBase
para contener y administrar más de uno Canvas
. El parámetro de configuración rcParams["backend.multifigure"]
controla cuándo se desea el comportamiento de MultiFigura .
Nota
Es importante tener en cuenta que la solución propuesta asume que [MEP22] ( https://github.com/matplotlib/matplotlib/wiki/Mep22 ) ya está implementado. Esto se debe simplemente a que la implementación real de Toolbar
hace que sea bastante difícil cambiar entre lienzos.
Implementación #
La primera implementación se realizará en GTK3 usando un Notebook como contenedor de lienzo.
FigureManagerBase
#
agregará los siguientes nuevos métodos
add_canvas
: Para agregar un lienzo a unFigureManager
objeto existenteremove_canvas
: Para quitar un lienzo de unFigureManager
objeto, si es el último, será destruidomove_canvas
: Para mover un lienzo de unoFigureManager
a otro.set_canvas_title
: Para cambiar el título asociado con un contenedor de lienzo específicoget_canvas_title
: Para obtener el título asociado con un contenedor de lienzo específicoget_active_canvas
: para obtener el lienzo que está en primer plano y está sujeto a los eventos de interfaz gráfica de usuario. No hayset_active_canvas
porque el lienzo activo se define cuandoshow
se llama a unCanvas
objeto.
new_figure_manager
#
Para controlar cuál FigureManager
contendrá las nuevas figuras, se agregará un parámetro adicional opcional figuremanager , el valor de este parámetro se pasará a new_figure_manager_given_figure
.
new_figure_manager_given_figure
#
Si se proporciona el parámetro figuremanager
FigureManager
, se utilizará este objeto en lugar de crear uno nuevo.Si
rcParams['backend.multifigure']
es verdadero:FigureManager
se usará el último objeto en lugar de crear uno nuevo.
Compatibilidad con versiones anteriores #
Para que las propiedades de MultiFigura sean visibles, el usuario tiene que activarlas directamente configurandorcParams['backend.multifigure'] =
True
Debería ser compatible con versiones anteriores para backends que se adhieren a la FigureManagerBase
estructura actual, incluso si aún no han implementado la magia de MultiFigura .
Alternativas #
En lugar de modificar FigureManagerBase
, podría ser posible agregar una clase paralela, que maneje los casos en los que
. Esto garantizará que no habrá ningún problema con los backends personalizados, pero también hace que el código sea más grande y que haya más cosas que mantener.rcParams['backend.multifigure'] = True