我的代码如下:
import msvcrt
while True:
if msvcrt.getch() == 'q':
print "Q was pressed"
elif msvcrt.getch() == 'x':
sys.exit()
else:
print "Key Pressed:" + str(msvcrt.getch()
此代码基于this question;我用它来熟悉getch
。
我注意到按键3次需要3次输出文字一次。为什么是这样?我试图将它用作事件循环,这太长了一段时间......
即使我输入3个不同的键,它也只输出第3个按键。
我怎样才能强迫它走得更快?有没有更好的方法来实现我想要实现的目标?
谢谢!
evamvid
答案 0 :(得分:10)
你在循环中调用该函数3次。尝试只调用一次:
import msvcrt
while True:
pressedKey = msvcrt.getch()
if pressedKey == 'q':
print "Q was pressed"
elif pressedKey == 'x':
sys.exit()
else:
print "Key Pressed:" + str(pressedKey)
答案 1 :(得分:1)
您还可以使用msvcrt.kbhit
功能稍微优化一下,只允许您根据需要调用msvcrt.getch()
:
while True:
if msvcrt.kbhit():
ch = msvcrt.getch()
if ch in '\x00\xe0': # arrow or function key prefix?
ch = msvcrt.getch() # second call returns the scan code
if ch == 'q':
print "Q was pressed"
elif ch == 'x':
sys.exit()
else:
print "Key Pressed:", ch
请注意,打印的Key Pressed
值对功能键之类的内容没有意义。那是因为在那些情况下,它实际上是键的Windows scan code,而不是角色的常规键码。