0

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

import msvcrt

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

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

我有 IF 语句,因为如果我只允许脚本抛出 'inp' 的值,它只会重复输出 255。所以我加入了 if 语句来响应除 255 之外的任何内容,现在当运行代码时,除了在 shell 中输出实际的按键字符之外什么都不做。

4

3 回答 3

0

getch 函数设计为在控制台中工作,而不是在图形程序中。

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

如果你在调节器 python 解释器中运行你的程序,它不会给你带来这个问题。

此外,当您使用 if 语句运行循环时,它会连续运行并使用比所需更多的处理器时间。在 Windows 中,这样做的唯一正确方法是使用窗口消息,这听起来对您的需求来说太过分了。

于 2013-09-23T19:57:10.617 回答
0

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

于 2013-09-23T15:56:22.700 回答
0

Python 有一个具有许多功能的键盘模块。您可以在ShellConsole中使用它。它还检测整个 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在记事本++中打开文件。
会有键盘事件。
不确定所有这些。
谢谢。

于 2017-06-28T07:29:45.257 回答