我正在try 用Python从键盘上读取任何键的组合. 这是通过终端实现的,所以任何库都应该使用stdin.需要超级用户就可以了.我希望按下系统上的任何键盘事件.

我试着使用键盘库,并try :

import keyboard
import time

def key_press(key):
    if key.event_type == "down":
        print(key.name)

keyboard.on_press(key_press)

while True:
    time.sleep(.1)

但是,这样一次只能打印一个密钥.我不知道预先要用到的 keys 的组合.我以为key_press上的‘key’应该是一个列表,而不只是一个键.

PYGAME似乎可以做到这一点,但这需要一个图形用户界面.

推荐答案

您可以改用pynput.keyboard模块,并使用一组记录当前按下了哪些键:

import time
from pynput import keyboard

pressed = set()

def on_press(key):
    if key not in pressed:
        pressed.add(key)
        print(pressed)

def on_release(key):
    pressed.remove(key)
    print(pressed)

listener = keyboard.Listener(on_press=on_press, on_release=on_release)
listener.start()

while True:
    time.sleep(1)

Python相关问答推荐

使用Ubuntu、Python和Weasyprint的Docker文件-venv的问题

如何防止Plotly在输出到PDF时减少行中的点数?

Python中的函数中是否有充分的理由接受float而不接受int?

在Python和matlab中显示不同 colored颜色 的图像

大Pandas 胚胎中产生组合

根据在同一数据框中的查找向数据框添加值

在Python中处理大量CSV文件中的数据

按顺序合并2个词典列表

Python,Fitting into a System of Equations

如果值发生变化,则列上的极性累积和

Python逻辑操作作为Pandas中的条件

不能使用Gekko方程'

Python列表不会在条件while循环中正确随机化'

什么是合并两个embrame的最佳方法,其中一个有日期范围,另一个有日期没有任何共享列?

Python Pandas获取层次路径直到顶层管理

跳过嵌套JSON中的级别并转换为Pandas Rame

基于另一列的GROUP-BY聚合将列添加到Polars LazyFrame

如何将数据帧中的timedelta转换为datetime

如何在Python Pandas中填充外部连接后的列中填充DDL值

使用np.fft.fft2和cv2.dft重现相位谱.为什么结果并不相似呢?