Cambiare bool da False a True alla pressione del tasto?
Vorrei lasciare che una variabile booleana cambi quando premo un tasto sulla tastiera.
Ad esempio, scrivo
activateE := Block[{}, edown = True;];
SetOptions[EvaluationNotebook[], NotebookEventActions -> {{"KeyDown", "e"} :> activateE}]
e quindi provare a monitorare le pressioni dei tasti tramite
edown = False;
Dynamic[edown]
Anche se il tasto e
ora smette di produrre qualsiasi input di testo nel notebook, purtroppo Dynamic
continua a essere visualizzato False
, indipendentemente dalla frequenza con cui premo il tasto e
. Cosa sto facendo di sbagliato o come farlo correttamente?
MODIFICARE:
In alternativa, sto provando la CurrentValue
funzione. Per esempio,
Dynamic[CurrentValue["ModifierKeys"]]
viene visualizzato correttamente, ad esempio, quando Ctrl
si preme il tasto. Ma se ci provo
Dynamic[CurrentValue["EventKey"]]
l'output None
non importa quale tasto premo. C'è un'opzione per CurrentValue
registrare una normale pressione di un tasto, come una lettera e
?
EDIT2:
Quello che sembra funzionare, è
EventHandler[InputField[], {"KeyDown", "e"} :> activateE]
ma solo se clicco prima su InputField per metterlo a fuoco.
Risposte
L'utilizzo NotebookEventActions
con l'opzione PassEventsUp -> True
fornisce il comportamento desiderato nella versione 11.3 (Windows 10 - 64 bit):
ClearAll[activateE]
activateE:= Block[{}, edown = True;];
SetOptions[EvaluationNotebook[],
NotebookEventActions -> {{"KeyDown", "e"} :> activateE, PassEventsUp -> True}]

Una variazione: alterna tra False
e True
quando e
viene premuto il tasto:

$Version
"11.3.0 per Microsoft Windows (64 bit) (7 marzo 2018)"