我知道这个问题很长,但我真正想知道的是粗体。
我更喜欢在Linux上使用python。
我正在尝试制作类似devorak的新键盘布局,但布局设置为layout1或layout2,具体取决于您是否持有热键(热键应该是ctrl?)
e.g。按d - > “z”使用键布局1打印到屏幕
e.g。按ctrl d - > “x”使用键布局2打印到屏幕
我的主要问题(以及需要回答的问题)是角色需要打印到屏幕的方式。
如果有人按下按键(按此顺序)“(a)(b)(c)(d)(ctrl + d)(shift + e = E)(f)(回车)”
现在假设这些按键的输出应为“oijzxKb” 我不希望输出用新行渲染:
o
i
j
z
x
K
b
我希望在按下每个角色时,角色会立即出现在屏幕上(无需等待他们按回车键)。
e.g.
press o
Screenshot1 o
press i
Screenshot2 oi
press j
Screenshot3 oij
.. etc
我假设我需要以下内容:
我可以在PyGame中做到这一点(但我可能无法剪切和粘贴等)而且我猜应该有一种更简单的方法。
我正在使用罗技G110键盘,我最终可能希望在我的所有设备上使用它作为我的qwerty键盘的替代品。
谢谢!
感谢第一反应, 使用来自http://code.activestate.com/recipes/134892/
的Getchgetch = _Getch()
word=""
while True:
c=getch.impl()
if c=="a":
word+="z"
elif ord(c)==127: #backspace
word=word[:-1]
else:
word+=c
print word
这就足够了,谢谢你。一旦我对改进感到满意,我会考虑做一些较低级别的操作系统,而不使用python。
getch的一个问题是ctrl + a无法区分ctrl + A(例如,如果按住ctrl并按下按键,则无法区分大小写的区别)
答案 0 :(得分:2)
如果可以依赖X窗口系统,您可以使用python-xlib模块或xpyb模块访问X窗口系统并使用XGrabKey调用来抓取键盘相关事件。每次KeyPress
事件后,您都可以打印按下的键。
现在,如果您真的想要编写一个键映射,这完全取决于OS /窗口系统。如果您使用X窗口系统(Ubuntu),您需要检查有关如何编写新键映射的X文档。在Ubuntu上,当前的键映射定义应该在/usr/share/X11/xkb
中。看一看,然后尝试复制和编辑一个。您可以使用setxkbmap
更改当前的键盘映射。
答案 1 :(得分:1)
请参阅此StackOverflow问题: Python read a single character from the user
评分最高的答案有以下链接: http://code.activestate.com/recipes/134892/
答案 2 :(得分:1)
要修改键盘的键映射,必须使用操作系统提供的工具。出于安全原因,大多数应用程序不接受生成的事件。
在您的情况下,那将是xmodmap
。不要忘记使用-pke
选项创建当前键盘映射的备份,因为您将犯错误 - 然后,您的键盘将不再起作用。
如果您还希望新的键盘映射在控制台上运行,请使用look at the kbd
package更改内核级别的键盘布局。