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

2024-05-16 00:22:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码如下:

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不同的键,它也只输出第三个按键。

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

谢谢!

评估ID


Tags: key代码importtrueifsysexitelse
2条回答

在循环中调用函数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)

您还可以使用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值对于函数键之类的东西没有意义。这是因为在这种情况下,它实际上是键的Windowsscan code,而不是字符的常规键代码。

相关问题 更多 >