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 Tooli 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 Toolbare le scorciatoie da Canvas. Le azioni e le scorciatoie saranno sotto forma di Tools.
Una nuova classe Navigationfarà da ponte tra gli eventi da
Canvase Toolbare 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 SubplotToolo addirittura non essere presenti nella barra degli strumenti come Quit.
ha i ToolBaseseguenti 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'Toolinterfaccia grafica (se esiste)
Strumenti disponibili #
ToolQuit
ToolEnableAllNavigation
ToolEnableNavigation
ToolToggleGrid
ToolToggleFullScreen
ToolToggleYScala
ToolToggleXScale
ToolHome
StrumentoIndietro
ToolForward
SalvaFiguraBase
ConfigureSubplotsBase
ToolToggleBase(ToolBase) #
ha i ToolToggleBaseseguenti 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.triggermetododisable(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 Navigationl'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).]