如何使用键盘模块检测Python中的按键?

问题描述 投票:0回答:3

我正在用Python编写一个程序来检测按下的键,并根据我的键盘做出决定。

我想使用python中的键盘模块来实现它。

我会做这样的事情,

import keyboard
while True:
    if keyboard.read_key() == 'enter':
        print('Enter is pressed)
    if keyboard.read_key() == 'q':
        print('Quitting the program)
        break
    if keyboard.read_key() == 's':
        print('Skiping the things')

但是没用。当我执行这个程序时,我必须按两次s才能执行“s”块。

另外,我有一个问题,执行完成后,它会在我的命令提示符中写入所有键,是否可以解决这个问题?

python keyboard keypress detect
3个回答
0
投票

根据键盘文档

其他应用程序(例如某些游戏)可能会注册吞噬所有关键事件的钩子。在这种情况下键盘将无法报告事件。

使用

keyboard
模块解决问题的一种方法是
keyboard.wait('key')

# Blocks until you press esc
keyboard.wait('esc')

解决方法如下:

import keyboard

keyboard.wait('enter')
print('Enter is pressed')

keyboard.wait('q')
print('Quitting the program')

keyboard.wait('s')
print('Skiping the things')

0
投票

据我所知,只有一种有效的方法来检测用户输入是否是键盘输入或鼠标输入,这是一个名为 pynput 的库......

from pynput.keyboard import Key , Listener , Controller

keyboard = Controller()

DoubleShot=False
shot=False
def on_press(key):
    global  DoubleShot
    global  shot

    if Key.num_lock == key:
        print("activate")
        DoubleShot=True
    if DoubleShot:
        if Key.shift == key:
      
            shot = not shot
            if shot:
                keyboard.press(Key.shift)
                keyboard.release(Key.shift)

def on_release(key):
    if key == Key.esc:
        return False

with Listener(on_press=on_press , on_release=on_release) as listener:
    listener.join()

我创建这个游戏是为了在点击“shift”时多次射击

  • 代码仅在单击“numlock”时激活......
  • 控制器用于单击您想要的任何键

注意: 在我的例子中,无限循环是一个问题,这就是为什么shot变量可以停止循环


0
投票

首先,你忘记关闭第 4 行和第 6 行的字符串。

但您的主要问题是您为 if 语句的每个分支调用

keyboard.read_key()
一次。这会使您的代码等待按键,检查它是否是
'enter'
,然后等待另一个按键,检查它是否是
'q'
,依此类推。

您应该做的是将密钥保存到变量中,然后检查该变量。它应该看起来像这样:

import keyboard
while True:
    key = keyboard.read_key()
    if key == 'enter':
        print('Enter is pressed')
    if key == 'q':
        print('Quitting the program')
        break
    if key == 's':
        print('Skiping the things')
© www.soinside.com 2019 - 2024. All rights reserved.