कुंजी प्रेस पर झूठी से सच में स्विच बूल?

Aug 17 2020

जब मैं कीबोर्ड पर कोई कुंजी दबाता हूं तो मैं बूलियन चर स्विच करने देना चाहता हूं।

उदाहरण के लिए, मैं लिखता हूं

activateE := Block[{}, edown = True;];
SetOptions[EvaluationNotebook[], NotebookEventActions -> {{"KeyDown", "e"} :> activateE}]

और फिर के माध्यम से प्रमुख प्रेस पर नजर रखने की कोशिश करें

edown = False;
Dynamic[edown]

जबकि कुंजी eअब नोटबुक में किसी भी पाठ इनपुट का उत्पादन बंद कर देती है, दुर्भाग्य से Dynamicहमेशा दिखाता रहता है False, भले ही मैं कितनी बार कुंजी दबाता हूं e। मैं क्या गलत कर रहा हूं, या यह कैसे ठीक से करना है?

संपादित करें:

वैकल्पिक रूप से, मैं CurrentValueफ़ंक्शन की कोशिश कर रहा हूं । उदाहरण के लिए,

Dynamic[CurrentValue["ModifierKeys"]]

ठीक से दिखाता है जब Ctrlकुंजी दबाया जा रहा है। लेकिन अगर मैं कोशिश करूं

Dynamic[CurrentValue["EventKey"]]

आउटपुट Noneकोई फर्क नहीं पड़ता कि मैं किस कुंजी को दबाता हूं। क्या इसका एक विकल्प CurrentValueनियमित कुंजी प्रेस, जैसे पत्र को पंजीकृत करेगा e?

EDIT2:

जो काम करने लगता है, है

EventHandler[InputField[], {"KeyDown", "e"} :> activateE]

लेकिन केवल अगर मैं पहली बार इसे फोकस में लाने के लिए InputField पर क्लिक करता हूं।

जवाब

4 kglr Aug 17 2020 at 00:22

NotebookEventActionsविकल्प के साथ उपयोग करने से PassEventsUp -> Trueसंस्करण 11.3 (विंडोज 10 - 64 बिट) में वांछित व्यवहार मिलता है:

ClearAll[activateE]
activateE:=  Block[{}, edown = True;];
SetOptions[EvaluationNotebook[], 
 NotebookEventActions -> {{"KeyDown", "e"} :> activateE, PassEventsUp -> True}]

एक बदलाव: के बीच टॉगल करें Falseऔर Trueजब कुंजी eदबाया जाता है:

$Version

"माइक्रोसॉफ्ट विंडोज के लिए 11.3.0 (64-बिट) (7 मार्च, 2018)"