Chuyển bool từ Sai thành Đúng khi nhấn phím?

Aug 17 2020

Tôi muốn để một biến boolean chuyển đổi khi tôi nhấn một phím trên bàn phím.

Ví dụ, tôi viết

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

và sau đó cố gắng theo dõi các lần nhấn phím qua

edown = False;
Dynamic[edown]

Mặc dù phím ehiện đã ngừng tạo bất kỳ dữ liệu nhập văn bản nào vào sổ ghi chép, nhưng thật không may, phím Dynamicluôn hiển thị False, bất kể tần suất tôi nhấn phím e. Tôi đang làm gì sai, hoặc làm thế nào để làm điều này đúng?

BIÊN TẬP:

Ngoài ra, tôi đang thử CurrentValuechức năng. Ví dụ,

Dynamic[CurrentValue["ModifierKeys"]]

hiển thị đúng ví dụ khi Ctrlphím đang được nhấn. Nhưng nếu tôi cố gắng

Dynamic[CurrentValue["EventKey"]]

đầu ra là Nonebất kể tôi nhấn phím nào. Có tùy chọn nào trong số CurrentValueđó sẽ đăng ký một phím bấm thông thường, như chữ cái ekhông?

EDIT2:

Những gì có vẻ hoạt động, là

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

nhưng chỉ khi tôi lần đầu tiên nhấp vào InputField để đưa nó vào tiêu điểm.

Trả lời

4 kglr Aug 17 2020 at 00:22

Việc sử dụng NotebookEventActionsvới tùy chọn PassEventsUp -> Truesẽ mang lại hành vi mong muốn trong Phiên bản 11.3 (Windows 10 - 64 bit):

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

Một biến thể: Chuyển đổi giữa FalseTruekhi phím eđược nhấn:

$Version

"11.3.0 dành cho Microsoft Windows (64-bit) (ngày 7 tháng 3 năm 2018)"