MEP22: Regravação da barra de ferramentas #
Estado #
Progresso
Filiais e solicitações pull #
Trabalho prévio:
Solicitações de pull:
Removendo as classes NavigationToolbar https://github.com/matplotlib/matplotlib/pull/2740 FECHADO
Mantendo as classes NavigationToolbar https://github.com/matplotlib/matplotlib/pull/2759 FECHADO
Navegação por eventos: https://github.com/matplotlib/matplotlib/pull/3652
Resumo #
O principal objetivo deste MEP é facilitar a modificação (adicionar, alterar, remover) a forma como o usuário interage com as figuras.
A interação do usuário com a figura é profundamente integrada na tela e na barra de ferramentas. Tornando extremamente difícil fazer qualquer modificação.
Este MEP propõe a separação desta interação em Barra de Ferramentas, Navegação e Ferramentas para fornecer acesso e reconfiguração independentes.
Essa abordagem facilitará a criação e o compartilhamento de ferramentas entre os usuários. No futuro distante, podemos até prever uma espécie de Marketplace para Tool
s, onde os mais populares podem ser adicionados à distribuição principal.
Descrição detalhada #
A reconfiguração da barra de ferramentas é complexa, na maioria das vezes requer um back-end personalizado.
A criação de ferramentas personalizadas às vezes interfere na barra de ferramentas, como exemplo, consulte https://github.com/matplotlib/matplotlib/issues/2694 também os atalhos são codificados e, novamente, não são facilmente modificáveis https://github.com/matplotlib/matplotlib /problemas/2699
A solução proposta é tirar as ações do Toolbar
e os atalhos do Canvas
. As ações e atalhos estarão na forma de Tool
s.
Uma nova classe Navigation
será a ponte entre os eventos do
Canvas
e Toolbar
e os redirecionará para o apropriado Tool
.
Ao final a interação com o usuário será dividida em três classes:
NavigationBase: Esta classe é instanciada para cada FigureManager e conecta todas as interações do usuário com as ferramentas
ToolbarBase: Esta classe existente é relegada apenas como um acesso GUI para Tools.
ToolBase: É a definição básica de Ferramentas.
Implementação #
ToolBase(objeto) #
As ferramentas podem ter uma representação gráfica como o SubplotTool
ou nem mesmo estar presentes na Barra de Ferramentas como Quit
.
O ToolBase
tem os seguintes atributos de classe para configuração no momento da definição
keymap = None: Chave(s) a ser(em) usada(s) para acionar a ferramenta
description = '': Pequena descrição da ferramenta
image = None: Imagem que é usada na barra de ferramentas
Os seguintes atributos de instância são definidos na instanciação:
nome
navegação
Métodos #
trigger(self, event)
: Este é o método principal da Ferramenta, é chamado quando a Ferramenta é acionada por:Clique no botão da barra de ferramentas
pressionamento de tecla associado ao mapa de teclas da ferramenta
Chamada para navigation.trigger_tool(name)
set_figure(self, figure)
: Defina a figura e os atributos de navegaçãodestroy(self, *args)
: Destrua aTool
interface gráfica (se existir)
Ferramentas Disponíveis #
Ferramenta Sair
FerramentaHabilitarTodaNavegação
FerramentaHabilitarNavegação
ToolToggleGrid
FerramentaToggleFullScreen
FerramentaToggleYScale
FerramentaToggleXScale
ToolHome
ToolBack
ToolForward
SaveFigureBase
ConfigureSubplotsBase
ToolToggleBase(ToolBase) #
O ToolToggleBase
tem os seguintes atributos de classe para configuração no momento da definição
radio_group = Nenhum: Atributo para agrupar 'rádio' como ferramentas (mutuamente exclusivas)
cursor = None: Cursor a ser usado quando a ferramenta está ativa
As ferramentas alternáveis podem capturar teclas pressionadas, movimentos do mouse e pressionamento do botão do mouse
Métodos #
enable(self, event)
: Chamado peloToolToggleBase.trigger
métododisable(self, event)
: Chamado quando a ferramenta é desativadatoggled
: Propriedade Verdadeiro ou Falso
Ferramentas Disponíveis #
ToolZoom
ToolPan
ToolbarBase #
Métodos (para implementação de back-end) #
add_toolitem(self, name, group, position, image, description, toggle)
: Adicione um item de ferramenta à barra de ferramentas. Este método é um retorno de chamadatool_added_event
(emitido pela navegação)set_message(self, s)
: Exibe uma mensagem na barra de ferramentas ou na barra de statustoggle_toolitem(self, name)
: Alterna o item de ferramenta sem disparar o evento.remove_toolitem(self, name)
: Remova um item de ferramenta doToolbar
Compatibilidade com versões anteriores #
Para compatibilidade com versões anteriores, 'navigation' foi adicionado à lista de valores suportados por rcParams["toolbar"]
(padrão: 'toolbar2'
), que é usado para Navigation
instanciação de classes em vez das classes NavigationToolbar
Com esse parâmetro, torna-se transparente para qualquer pessoa que use os back-ends existentes.
[@pelson comment: Isso também nos dá a oportunidade de evitar a necessidade de implementar tudo isso no mesmo PR - alguns back-ends podem existir sem a nova funcionalidade por um curto período (mas isso deve ser feito em algum momento).]