python-3.x - 如何等到在 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
解决方案
上面的代码将不起作用,因为 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 项目页面
推荐阅读
- regex - ls 所有不匹配多个扩展名的目录
- asp.net - 如何在初始池线程之外对非池线程执行 ASP.NET Core 执行?
- sql-server - SQL Server SSL + TDE 与始终加密
- android - Play 商店 Alpha/Beta 选择加入链接是否相同?
- angular - 标签未触发和事件未在 Angular 4 中构建的单页 Web 应用程序中注册
- objective-c - Pod 视图控制器出现问题
- javascript - Angular JS - ngRoute 时控制器不起作用
- sylius - Sylius 基本监听器不工作
- vue.js - Vue 中的 Pusher Chatkit - onNewMessage 钩子触发了两次?
- php - SQL LIKE 不搜索