4

我的代码如下:

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()

此代码基于此问题;我用它来熟悉自己getch

我注意到需要 3 次按键 3 次才能输出一次文本。为什么是这样?我正在尝试将它用作事件循环,这太滞后了......

即使我键入 3 个不同的键,它也只会输出第 3 个按键。

我怎样才能强迫它走得更快?有没有更好的方法来实现我想要实现的目标?

谢谢!

伊万维德

4

2 回答 2

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)
于 2014-03-12T22:48:04.637 回答
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的密钥扫描代码,而不是字符的常规密钥代码。

于 2014-03-12T23:32:38.900 回答