[英]Detect Caps Lock in Python curses
對於這樣一個基本問題,我很驚訝我找不到任何搜索...
無論如何,我用Python制作了一個curses應用程序,它有助於解決某個DSiWare游戲的難題。 有了它,你可以拼圖並單獨檢查它的組成部分。 鍵qweasdzx
用於繪制圖塊(按鍵排列在某種調色板中)。 在按住Shift的同時按下其中一個按鈕會突出顯示該顏色的圖塊。 我無法要求更自然的控制方案。
所以很遺憾,Shift再一次給了我一些問題(上次我遇到Shift問題時,我獲得了Tumbleweed徽章)。 雖然這次,問題或多或少是Caps Lock,它通過反轉功能完全搞砸了我的程序。
如何使用curses檢測Python中Caps Lock的狀態?
編輯:如果你打算建議使用一個單獨的模塊,我可能應該提醒你,curses - 因此我的程序 - 在UNIX領域。
我自己找到了一個解決方案:
由於curses根據ΤΖΩΤΖΙΟΥ完全不知道Caps Lock設置,我嘗試了另一種解決方案。 具體來說,我查找了如何在BASH腳本中檢查Caps Lock。 我發現的是:
僅限Linux。 需要X Window系統。
$ xset q | grep LED
> auto repeat: on key click percent: 0 LED mask: 00000000
該輸出中的最后一個0(字符串中的第66個字符)是Caps Lock標志。 如果它打開則為1,如果打開則為0。
Python可以使用僅Linux 命令模塊運行UNIX系統命令。 命令似乎不會干擾curses。
>>> import commands
>>> # Caps Lock is off.
>>> commands.getoutput("xset q | grep LED")[65]
'0'
>>> # Setting Caps Lock on now.
>>> commands.getoutput("xset q | grep LED")[65]
'1'
這對我來說很好; 這是一個個人使用的腳本,並不像我的程序不是Linux專有的。 但我希望有人能擁有另一個更兼容Windows的解決方案。
我現在要接受這個自我回答,但如果其他人能夠提出更好的解決方案,我希望看到它。
簡短的回答:你做不到。
更長的答案:
curses被創建為基於terminfo的庫,以便於創建獨立於所使用的終端的基於字符的UI( for terminal in 'vt220', 'wyse100', …
)。
這些通過串行線連接的終端和來回往返主機的通信是通過純文本(由用戶輸入或由主機輸出)或特殊序列(“轉義”序列;如果特殊鍵是用戶輸入的話按下,如↑或Prev ,或者如果請求了光標定位或屏幕清除等特殊操作,則由主機輸出)。
我不知道任何啞終端在按下Caps Lock鍵時發送特殊序列,或者主機查詢Caps Lock狀態; 鎖定首都是終端工作的一部分,主持人不需要任何知識。 這類似於當您自己按下Control鍵時無法使用curses程序的原因。
關於curses的一切都與terminfo功能有關; 你問的問題沒有任何相關的能力。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.