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 umFigureManagerobjeto existenteremove_canvas: Para remover uma tela de umFigureManagerobjeto, se for a última, ela será destruídamove_canvas: Para mover uma tela de umFigureManagerpara outro.set_canvas_title: Para alterar o título associado a um contêiner de tela específicoget_canvas_title: Para obter o título associado a um contêiner de tela específicoget_active_canvas: Para obter a tela que está em primeiro plano e está sujeita aos eventos gui. Não háset_active_canvasporque a tela ativa é definida quandoshowé chamada em umCanvasobjeto.
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 últimoFigureManagerobjeto 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