我想在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”,虽然“正确”键被按下。
提前致谢!
答案 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")
字节文字总是以'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'