MEP22: riscrittura della barra degli strumenti #

Stato n.

Progresso

Filiali e Pull request #

Lavoro precedente:

Richieste pull:

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 navigazione

  • destroy(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 dal ToolToggleBase.triggermetodo

  • disable(self, event): chiamato quando lo strumento è disattivato

  • toggled: 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 da tool_added_event(emesso dalla navigazione)

  • set_message(self, s): visualizza un messaggio sulla barra degli strumenti o nella barra di stato

  • toggle_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).]