我有一个脚本应该与用户输入交互(按箭头键),但我无法获得密钥。我尝试了raw_input和其他一些功能,但它们没有用。这是我的示例代码,它应该是什么样的(在另一个函数中运行bool可以设置为False)
running = True
while running:
#if input == Arrow_UP:
# do_Sth
#elif ...
display()
time.sleep(1)
另一个问题是,我怎样才能每秒只调用一次显示功能,但会立即对输入作出反应?
答案 0 :(得分:3)
有不同的情况:
如果您使用TKinter或PyGame等图形前端,则可以将事件绑定到箭头键并等待此事件。
取自this answer的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中所述的this answer
Curses旨在创建在终端(在linux下)运行的接口。
如果使用curses,则在您进入应用程序时将清除终端的内容,并在退出时恢复。如果您不想要此行为,则可以使用getch()包装器,如this answer中所述。使用getch = _Getch()
初始化getch后,您可以使用key = getch()
至于如何每秒调用display(),它又取决于具体情况,但是如果你在终端中的单个进程中工作,那么进程在等待时将无法调用display()函数输入。解决方案是为display()函数使用不同的线程,如
import threading;
def display ():
threading.Timer(1., display).start ();
print "display"
display ()
此处display
每次调用时都会在将来安排一秒钟。您当然可以在此调用周围设置一些条件,以便在满足某些条件时进程停止,在您输入的情况下。有关更多讨论,请参阅this answer。