使用python msvcrt识别按键

时间:2017-08-16 11:58:54

标签: python msvcrt

我想在python中使用msvcrt模块,但我无法使其工作 我在Windows 10上,有几个“活动键盘”(我可以将它从azerty更改为qwerty和东西)除了Python3本身之外没有做任何事情(我是说因为可能有一些要求或操作要做,我不知道)。

我想做的很简单 - 按一个键,然后根据按下的键做一些事情(所以我需要我的电脑来识别那个键)。

我使用以下代码尝试了它:

import msvcrt
while 1:                      #is that necessary?
    char = msvcrt.getch()
    if char == ???            #that's what I'm struggling with
        print("yay")
    else:
        print("nope") 

我根本不知道如何“打电话”我的钥匙。我试过了'\r'char(13),ASCII代码等等,但这些都没有奏效。机会是,他们应该,但我做错了 - 不工作我的意思是,我永远不会得到一个“yay”,虽然“正确”键被按下。

提前致谢!

2 个答案:

答案 0 :(得分:1)

这在Windows 10上适用于Python 3:

import msvcrt
import os

os.system('cls')
while True:
    print('Press key [combination] (Kill console to quit): ', end='', flush=True)
    key = msvcrt.getwch()
    num = ord(key)
    if num in (0, 224):
        ext = msvcrt.getwch()
        print(f'prefix: {num}   -   key: {ext!r}   -   unicode: {ord(ext)}')
    else:
        print(f'key: {key!r}   -   unicode: {ord(key)}')

答案 1 :(得分:0)

您应该在希望的密钥之前添加b,即:

char = char = msvcrt.getch()
if char == b"\r":
    print("yay")
else:
    print("nope")

Python 3.3 documentation州:

  

字节文字总是以'b'或'B'为前缀;它们生成字节类型的实例而不是str类型。它们可能只包含ASCII字符;数字值为128或更大的字节必须用转义表示。

按下所需的密钥后,您可以通过查看msvcrt.getch()的输出来自行检查。

>>> msvcrt.getch() # I pressed Enter
b'\r'
>>> msvcrt.getch() # I pressed SPACE
b' '
>>> msvcrt.getch() # I pressed BACKSPACE
b'\x08'