Python从命令行获取箭头键
我有一个脚本,应该能和用户的输入互动(比如按箭头键),但是我无法获取到这些按键。我试过用raw_input和其他一些函数,但都没成功。下面是我的示例代码,应该是这个样子(运行的布尔值可以在另一个函数中设置为False)。
running = True
while running:
#if input == Arrow_UP:
# do_Sth
#elif ...
display()
time.sleep(1)
还有一个问题是,我该如何让显示函数每秒只调用一次,但又能立即对输入做出反应呢?
1 个回答
7
这里有几种不同的情况:
如果你使用像 TKinter 或 PyGame 这样的图形界面,你可以把一个事件绑定到箭头键上,然后等待这个事件的发生。
下面是一个在Tkinter中的例子,来自于 这个回答:
from Tkinter import * main = Tk() def leftKey(event): print "Left key pressed" def rightKey(event): print "Right key pressed" frame = Frame(main, width=100, height=100) main.bind('<Left>', leftKey) main.bind('<Right>', rightKey) frame.pack() main.mainloop()
如果你的应用程序是在终端中运行的,可以考虑使用 curses,具体可以参考 这个回答。
Curses是专门用来创建在终端(Linux下)运行的界面的。
如果你使用curses,当你进入应用程序时,终端的内容会被清空,退出时会恢复。如果你不想要这种行为,可以使用一个getch()的包装器,具体可以参考 这个回答。初始化getch时用
getch = _Getch()
,然后你可以用key = getch()
来存储下一个输入。
至于如何每秒调用一次display(),这又要看具体情况。如果你在终端中使用单个进程,那么在等待输入时,这个进程是无法调用你的display()函数的。解决办法是为display()函数使用一个不同的线程,如下所示:
import threading;
def display ():
threading.Timer(1., display).start ();
print "display"
display ()
这里的 display
每次被调用时都会安排自己在一秒后再次调用。当然,你可以在这个调用周围加上一些条件,这样当满足某些条件时,进程就会停止,比如说当有输入时。想了解更多,可以参考 这个回答。