我有一个脚本应该与用户输入交互(按箭头键),但我无法获取按键。我尝试了 raw_input 和其他一些函数,但它们不起作用。这是我的示例代码,它应该是什么样子(可以在另一个函数中将运行 bool 设置为 False)
running = True
while running:
#if input == Arrow_UP:
# do_Sth
#elif ...
display()
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)
另一个问题是,如何每秒只调用一次显示函数,但立即对输入做出反应?
有不同的情况:
如果您使用图形前端,例如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()
Run Code Online (Sandbox Code Playgroud)如果您的应用程序停留在终端中,请考虑使用本答案中所述的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 ()
Run Code Online (Sandbox Code Playgroud)
display
每次调用时,这里都会将自己安排在未来一秒。当然,您可以在此调用周围设置一些条件,以便在满足某些条件时(在您的情况下,当给出输入时)该过程停止。请参阅此答案以进行更深入的讨论。