我现在正在互联网上寻找一段时间,但我似乎无法找到一种独特的Linux和Windows方式,可以捕捉向上,向下等事件。
使用Windows上的msvcrt
包我找到了这个解决方案:
from msvcrt import getch
while True:
print ('Distance from zero: ' + str(pos))
key = ord(getch())
if key == 224: #Special keys (arrows, f keys, ins, del, etc.)
key = ord(getch())
if key == 80: #Down arrow
对于Linux,我使用了termios
包:
import sys,tty,termios
class _Getch:
def __call__(self):
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(3)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
def get():
inkey = _Getch()
while(1):
k=inkey()
if k!='':break
if k=='\x1b[A':
print ("up")
def main():
for i in range(0,20):
get()
if __name__=='__main__':
main()
我还找到了Linux和Windows支持的软件包:keyboard
import keyboard #Using module keyboard
while True:#making a loop
try: #used try so that if user pressed other than the given key error will not be shown
if keyboard.is_pressed(keyboard.KEY_DOWN):#if arrow down is pressed
print('You Pressed down Key!')
这似乎在Windows上运行良好,但在Linux上运行不正常。
(我在Stack溢出时发现了所有这些实现。)
我的目标是在不同的选择上上下移动我的箭头。也欢迎完成此任务的替代方法。
答案 0 :(得分:0)
我想你的问题是关于仅在终端或命令提示符上捕获箭头键事件。如果是这种情况,那么在Linux中使用getch()用于windows和termios + tty是可行的方法,如你所提到的那样。
备用跨平台方法包括:
pip install http://www.lfd.uci.edu/~gohlke/pythonlibs/xugyqnq9/curses-2.2-cp27-none-win32.whl
一般情况下,您最好在msvcrt / ttty + termios中实现自己的解决方案,或者使用像Pygame或Tkinter这样的GUI库(如果应用程序没有特别要求在终端上运行),这样可以提供捕获功能键盘事件。