कुंजी प्रेस पर झूठी से सच में स्विच बूल?
जब मैं कीबोर्ड पर कोई कुंजी दबाता हूं तो मैं बूलियन चर स्विच करने देना चाहता हूं।
उदाहरण के लिए, मैं लिखता हूं
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 पर क्लिक करता हूं।
जवाब
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)"