Python Windows`msvcrt.getch()`只检测每个第三个按键?

时间:2014-03-12 22:44:25

标签: python python-2.7 msvcrt event-loop getch

我的代码如下:

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

2 个答案:

答案 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,而不是角色的常规键码。