MEP23: Várias figuras por janela da GUI #

Estado #

Discussão

Filiais e solicitações pull #

Trabalho anterior - https://github.com/matplotlib/matplotlib/pull/2465 To-delete

Resumo #

Adicione a possibilidade de ter várias figuras agrupadas sob o mesmo FigureManager

Descrição detalhada #

Sob a estrutura atual, cada tela tem sua própria janela.

Este é e pode continuar sendo o método de operação desejado para a maioria dos casos de uso.

Às vezes, quando há muitas figuras abertas ao mesmo tempo, é desejável poder agrupá-las na mesma janela [consulte]( https://github.com/matplotlib/matplotlib/issues/2194 ).

A solução proposta se modifica FigureManagerBasepara conter e gerenciar mais de um arquivo Canvas. O parâmetro de configuração rcParams["backend.multifigure"]controla quando o comportamento MultiFigure é desejado.

Observação

É importante observar que a solução proposta pressupõe que o [MEP22]( https://github.com/matplotlib/matplotlib/wiki/Mep22 ) já esteja em vigor. Isso ocorre simplesmente porque a implementação real do Toolbartorna muito difícil alternar entre as telas.

Implementação #

A primeira implementação será feita em GTK3 usando um Notebook como canvas container.

FigureManagerBase#

adicionará os seguintes novos métodos

  • add_canvas: Para adicionar uma tela a um FigureManagerobjeto existente

  • remove_canvas: Para remover uma tela de um FigureManagerobjeto, se for a última, ela será destruída

  • move_canvas: Para mover uma tela de um FigureManager para outro.

  • set_canvas_title: Para alterar o título associado a um contêiner de tela específico

  • get_canvas_title: Para obter o título associado a um contêiner de tela específico

  • get_active_canvas: Para obter a tela que está em primeiro plano e está sujeita aos eventos gui. Não há set_active_canvas porque a tela ativa é definida quando showé chamada em um Canvasobjeto.

new_figure_manager#

Para controlar qual FigureManagerconterá as novas figuras, um parâmetro extra opcional figuremanager será adicionado, este valor do parâmetro será passado para new_figure_manager_given_figure.

new_figure_manager_given_figure#

  • Se o parâmetro figuremanager for fornecido, este FigureManagerobjeto será usado em vez de criar um novo.

  • Se rcParams['backend.multifigure']for True: O último FigureManagerobjeto será usado em vez de criar um novo.

Compatibilidade com versões anteriores #

Para que as propriedades MultiFigure sejam visíveis, o usuário deve ativá-las diretamente definindorcParams['backend.multifigure'] = True

Deve ser compatível com versões anteriores para back-ends que aderem à FigureManagerBaseestrutura atual, mesmo que ainda não tenham implementado a mágica MultiFigure .

Alternativas #

Em vez de modificar o FigureManagerBase, pode ser possível adicionar uma classe paralela, que lida com os casos em que . Isso garantirá que não haverá problemas com back-ends personalizados, mas também aumentará o código e mais coisas para manter.rcParams['backend.multifigure'] = True