首页 > 解决方案 > 如何等到在 python3 中按下热键而不需要打开终端窗口?

问题描述

我想要某种等待直到按下某个热键的封锁。我会对 input('Press Enter to continue') 之类的东西感到满意,除了这需要我的屏幕位于终端页面上,我希望它能够在我专注于另一个窗口时拿起我的键。

Luis Jose 的解决方案从这里看起来可能会起作用,而且我已经在使用 opencv 进行 smoethign 了,所以它被导入了:如何用击键杀死一个 while 循环?然而,运行代码对我没有任何作用,它并没有发现我按下了“a”并且永远停留在他循环中的事实。

import cv2

while (1):
    k=0xFF & cv2.waitKey(1)
    if k == ord('a'):
        break

标签: python-3.xopencvpynput

解决方案


上面的代码将不起作用,因为 cv2.waitKey 旨在在使用 cv2.imshow 创建显示窗口并且您想要停止显示时工作。这是有道理的,因为 opencv 被设计为一个图像和视频处理工具箱。您可以尝试使用 pynput 包。

from pynput import keyboard

def on_press(key):
    try:
        print('alphanumeric key {0} pressed'.format(
            key.char))
    except AttributeError:
        print('special key {0} pressed'.format(
            key))

def on_release(key):
    print('{0} released'.format(
        key))
    if key == keyboard.Key.esc:
        # Stop listener
        return False

# Collect events until released
with keyboard.Listener(
        on_press=on_press,
        on_release=on_release) as listener:
    listener.join()

当您按下 esc 键时,上述代码终止。有关该软件包的更多详细信息,您可以访问:pynput 项目页面


推荐阅读