Python - 检测shell中的keypress

时间:2013-09-23 15:44:33

标签: python shell keypress python-idle

尝试在Python中检测并响应按键。我使用IDLE和Python 3.3。到目前为止我有以下代码

import msvcrt

while True:
   inp = ord(msvcrt.getch())

   if (inp != 255):
      print(inp)

我有IF语句,因为如果我只是允许脚本丢弃' inp'它只是反复敲出255。所以我抛出if语句来响应255以外的任何东西,现在运行时代码什么都不做,只是在shell中输出实际的keypress字符。

3 个答案:

答案 0 :(得分:0)

这是因为getch立即读取输入,它不会等到你输入内容。当它没有收到任何输入时,它只会返回“\ xff”(序数255)。

答案 1 :(得分:0)

getch功能旨在在控制台中工作,而不是在图形程序中工作。

当您在图形程序中使用它时,它将立即返回\ xff。

如果你在reguler python解释器中运行你的程序,它不会导致你的问题。

此外,当您使用if语句运行循环时,它会持续运行并使用更多的处理器时间,然后它需要。在Windows中,这样做的唯一正确方法是使用窗口消息,这听起来像是满足您的需求。

答案 2 :(得分:0)

Python有一个keyboard模块,具有许多功能。您可以在 Shell 控制台中使用它。它还检测整个Windows的关键 安装它,也许使用此命令:

pip3 install keyboard

然后在代码中使用它:

import keyboard #Using module keyboard
while True:  #making a loop
    try:  #used try so that if user pressed other than the given key error will not be shown
        if keyboard.is_pressed('a'): #if key 'a' is pressed 
            print('You Pressed A Key!')
            break #finishing the loop
        else:
            pass
    except:
        break  #if user pressed other than the given key the loop will break

您可以将其设置为多个密钥检测:

if keyboard.is_pressed('a') or keyboard.is_pressed('b') or keyboard.is_pressed('c'):  # and so on
    #then do this

安装模块时,转到文件夹:

python36-32/Lib/site-packages/keyboard

在记事本++中打开文件_keyboard_event.py 会有键盘事件 不确定他们是谁。
感谢。