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 FigureManagerBase
para 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 Toolbar
torna 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 umFigureManager
objeto existenteremove_canvas
: Para remover uma tela de umFigureManager
objeto, se for a última, ela será destruídamove_canvas
: Para mover uma tela de umFigureManager
para 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_canvas
porque a tela ativa é definida quandoshow
é chamada em umCanvas
objeto.
new_figure_manager
#
Para controlar qual FigureManager
conterá 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
FigureManager
objeto será usado em vez de criar um novo.Se
rcParams['backend.multifigure']
for True: O últimoFigureManager
objeto 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 à FigureManagerBase
estrutura 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