2010-07-08 59 views
4

对于这样一个基本的问题,我很惊讶,我无法找到通过搜索什么...检测上限在Python锁定诅咒

不管怎么说,我做了Python中的诅咒的应用程序,在一个解决难题助攻某些DSiWare游戏。有了它,你可以制作一个谜题,并单独检查它的组件。键qweasdzx用于绘制图块(按键排列在某种调色板中)。按住Shift键之一,同时按住Shift高亮显示该颜色。我不能要求更自然的控制方案。

所以很遗憾的是,Shift再次给我提出了问题(上一次我遇到Shift问题,我赢得了Tumbleweed徽章)。虽然这一次,问题是或多或少的大写锁定,它通过颠倒功能彻底搞砸了我的程序。

如何使用curses检测Python中Caps Lock的状态?

编辑:如果你打算建议使用单独的模块,我可能应该提醒你,诅咒 - 因此我的程序 - 在UNIX领域。

回答

6

我发现我自己的解决方案:

因为咒骂是完全不知道的上限的锁定设置根据ΤΖΩΤΖΙΟΥ,我试过的替代解决方案。具体来说,我查了一下如何检查BASH脚本中的Caps Lock。我发现的是:

仅限Linux。需要X Window系统。

$ xset q | grep LED 
> auto repeat: on key click percent: 0 LED mask: 00000000 

在输出(字符串中的字符66位),最后0是Caps Lock键标志。如果打开,则为1;如果关闭,则为0。

Python可以使用仅限Linux的commands模块运行UNIX系统命令。命令似乎不会干扰诅咒。

>>> 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的解决方案。

我现在要接受这个自我回答,但如果有人能想出更好的工作解决方案,我希望看到它。

+0

+1:这*是*解决您的问题,所以我upvoting;尽管如此,在将自己的答案标记为*答案*之前,您必须先累积一些声誉。 – tzot 2010-07-09 09:41:01

+0

看起来时间是决定是否可以接受他/她自己的答案的唯一因素,因为我在48小时后能够接受这一点。我想告诉其他用户,即使我已经接受了这个答案,如果有人访问这个问题会得到更好的答案,我会很乐意改变我的选择。 – 2010-07-10 19:17:07

+1

请注意,如果您在X窗口下运行,此解决方案才可用。它不会在Linux控制台上工作,并且如果您远程连接(即ssh)到系统(没有某种类型的X转发),它将不起作用。 – Craig 2010-07-11 22:36:30

3

简短的回答:你不能。

较长答案:

诅咒创建作为基于terminfo的库来缓解独立(for terminal in 'vt220', 'wyse100', …)中使用的终端的基于字符的用户界面的创建。这些通过串行线路连接的终端以及与主机之间的通信通过纯文本(由用户输入或由主机输出)或特殊序列(“逃逸”序列;由用户输入如果按下特殊键,如上一个,或者如果请求特殊操作(如光标定位或屏幕清除),则由主机输出)。

我不知道任何愚蠢的终端发送一个特殊的序列,无论大写锁定键被按下,或主机查询大写锁定状态;锁定首都是终端工作的一部分,主持人不需要任何知识。这与您在Control键自行按下时无法执行curses程序操作的原因类似。

有关curses的一切与terminfo的功能有关;没有任何相关的能力来满足你的要求。