2012-01-24 38 views
0

我正在使用python-xlib来生成一些按键事件。为了做到这一点,我需要确定一个特定的角色(比如'A')是否需要换挡遮罩。确定是否使用Python-xlib移动了一个密钥

C XLib定义了一种称为XConvertCase的方法,可以用于此目的。不过,我在python-xlib中看不到任何类似的东西。

目前我有以下的,这是可怕的:

if key in '[email protected]#$%^&*()_+|}{":?><' or key.isupper(): 
    # key needs shifting... 

什么是确定给定的角色需要一个移掩模

+1

无论您如何解决此问题,请记住,世界各地的不同键盘布局对于很多符号都有不同的位置。 (在我的键盘上,现在,你的'〜'所在的字符就是'''(双引号) – jsbueno

回答

1

一些示例代码是这里的最佳方式:http://shallowsky.com/software/crikey/pykey-0.1,但是它使用几乎与你描述的“可怕”相同的代码。

这是另一种方式,不能说它是“更好”,只是“不同”。我真的不知道我在做什么,这是基于一些研究加一些试验,很可能是致命的缺陷:

>>> import Xlib 
>>> import Xlib.display 
>>> display = Xlib.display.Display() 
Xlib.protocol.request.QueryExtension 
>>> m = display._keymap_codes 
>>> unshifted = [k[0] for k in m if k] 
>>> shifted = [k[1] for k in m if k] 
>>> ord('[') in shifted 
False 
>>> ord('?') in shifted 
True 
>>> ord('}') in shifted 
True 
>>> ord('/') in shifted 
False 

你也可以使用Display.get_keyboard_mapping代替_keymap_codes,但你我需要将正确的参数传递给它,而且对于我的能力来说,文档有点太模糊。

相关问题