MEP22: riscrittura della barra degli strumenti #
Stato n.
Progresso
Filiali e Pull request #
Lavoro precedente:
Richieste pull:
Rimozione delle classi NavigationToolbar https://github.com/matplotlib/matplotlib/pull/2740 CLOSED
Mantenere le classi NavigationToolbar https://github.com/matplotlib/matplotlib/pull/2759 CHIUSE
Navigazione per eventi: https://github.com/matplotlib/matplotlib/pull/3652
Estratto n.
L'obiettivo principale di questo MEP è rendere più facile modificare (aggiungere, cambiare, rimuovere) il modo in cui l'utente interagisce con le figure.
L'interazione dell'utente con la figura è profondamente integrata all'interno della tela e della barra degli strumenti. Rendendo estremamente difficile apportare qualsiasi modifica.
Questo deputato propone la separazione di questa interazione in barra degli strumenti, navigazione e strumenti per fornire accesso e riconfigurazione indipendenti.
Questo approccio semplificherà la creazione e la condivisione di strumenti tra gli utenti. In un lontano futuro, possiamo persino prevedere una sorta di Marketplace per Tool
i messaggi in cui i più popolari possono essere aggiunti alla distribuzione principale.
Descrizione dettagliata #
La riconfigurazione della Toolbar è complessa, il più delle volte richiede un backend personalizzato.
La creazione di strumenti personalizzati a volte interferisce con la barra degli strumenti, ad esempio vedere https://github.com/matplotlib/matplotlib/issues/2694 anche le scorciatoie sono codificate e di nuovo non facilmente modificabili https://github.com/matplotlib/matplotlib /problemi/2699
La soluzione proposta è eliminare le azioni da Toolbar
e le scorciatoie da Canvas
. Le azioni e le scorciatoie saranno sotto forma di Tool
s.
Una nuova classe Navigation
farà da ponte tra gli eventi da
Canvas
e Toolbar
e li reindirizzerà all'appropriato Tool
.
Al termine l'interazione con l'utente sarà suddivisa in tre classi:
NavigationBase: questa classe viene istanziata per ogni FigureManager e collega tutte le interazioni dell'utente con gli strumenti
ToolbarBase: questa classe esistente è relegata solo come accesso GUI a Tools.
ToolBase: è la definizione di base degli strumenti.
Implementazione n.
ToolBase(oggetto) #
Gli strumenti possono avere una rappresentazione grafica come the SubplotTool
o addirittura non essere presenti nella barra degli strumenti come Quit
.
ha i ToolBase
seguenti attributi di classe per la configurazione al momento della definizione
keymap = None: chiave/e da utilizzare per attivare lo strumento
description = '': Piccola descrizione dello strumento
image = Nessuno: Immagine utilizzata nella barra degli strumenti
I seguenti attributi di istanza sono impostati al momento dell'istanziazione:
nome
navigazione
Metodi #
trigger(self, event)
: Questo è il metodo principale dello strumento, viene chiamato quando lo strumento viene attivato da:Clic sul pulsante della barra degli strumenti
pressione del tasto associata alla Tool Keymap
Chiamata a navigation.trigger_tool(nome)
set_figure(self, figure)
: imposta gli attributi della figura e della navigazionedestroy(self, *args)
: Distruggi l'Tool
interfaccia grafica (se esiste)
Strumenti disponibili #
ToolQuit
ToolEnableAllNavigation
ToolEnableNavigation
ToolToggleGrid
ToolToggleFullScreen
ToolToggleYScala
ToolToggleXScale
ToolHome
StrumentoIndietro
ToolForward
SalvaFiguraBase
ConfigureSubplotsBase
ToolToggleBase(ToolBase) #
ha i ToolToggleBase
seguenti attributi di classe per la configurazione al momento della definizione
radio_group = None: Attributo al gruppo 'radio' come strumenti (si escludono a vicenda)
cursor = Nessuno: Cursore da utilizzare quando lo strumento è attivo
Gli strumenti attivabili possono acquisire la pressione dei tasti, i movimenti del mouse e la pressione dei pulsanti del mouse
Metodi #
enable(self, event)
: Chiamato dalToolToggleBase.trigger
metododisable(self, event)
: chiamato quando lo strumento è disattivatotoggled
: Proprietà True o False
Strumenti disponibili #
ToolZoom
ToolPan
Base della barra degli strumenti #
Metodi (per l'implementazione back-end) #
add_toolitem(self, name, group, position, image, description, toggle)
: aggiunge un elemento strumento alla barra degli strumenti. Questo metodo è un callback datool_added_event
(emesso dalla navigazione)set_message(self, s)
: visualizza un messaggio sulla barra degli strumenti o nella barra di statotoggle_toolitem(self, name)
: attiva/disattiva l'oggetto strumento senza attivare l'evento.remove_toolitem(self, name)
: Rimuove uno strumento dal fileToolbar
Compatibilità con le versioni precedenti #
Per compatibilità con le versioni precedenti, è stata aggiunta 'navigazione' all'elenco dei valori supportati da rcParams["toolbar"]
(predefinito: 'toolbar2'
), utilizzato per Navigation
l'istanziazione delle classi invece delle classi NavigationToolbar
Con questo parametro, lo rende trasparente a chiunque utilizzi i backend esistenti.
[Commento @pelson: questo ci dà anche l'opportunità di evitare di dover implementare tutto questo nella stessa PR - alcuni backend possono potenzialmente esistere senza la nuova funzionalità per un breve periodo (ma prima o poi deve essere fatto).]