【问题标题】:Which Python module can monitor 3 keys combination in a while loop?哪个 Python 模块可以在 while 循环中监视 3 个键组合?
【发布时间】:2019-03-07 03:53:13
【问题描述】:

您好,我正在尝试执行以下操作:

while True:
    do something 
    if key = q is been hold but not released and key = ctrl is been hold and key = shelf is been hold:
        break
    time.sleep(0.008333)#run it at 120fps

我在 Google 上四处搜索,但找不到可以让您检查是否已持有密钥的工具。 最多的是新闻还是发布? 按下表示从松开的时刻键变为保持键。 释放意味着时刻键从释放变为保留。 这是非常难以捕捉的一小部分时间。 但是搁置是一个持续的状态,应该很容易捕捉到。

然后我找到了pynput。 看起来它也是一个循环。 但我不知道如何同时运行 2 个循环。 一个循环来做我的事情。 一个循环来监控键然后设置一些标志?

或者我可以像这样运行循环?

while True:
    do something()
    monitor key board for 0.00833333 seconds.

但我不知道如何只运行 pynput 0.0083333 秒...

请帮忙?

【问题讨论】:

标签: python loops input key


【解决方案1】:

解决了

我发现使用pynput的正确方法是启动监听器不加入

在窗口中 Ctrl 是 Ctrl_l 或 ctrl_r shift 可以是 shift 或 shift_l 或 shift_r 在 Mac 上 ctrl就是ctrl

为了兼容 我必须包括所有可能的组合。

import pynput,time

is_quit = False

KeyComb_Quit = [
    {pynput.keyboard.Key.ctrl, pynput.keyboard.KeyCode(char='q')},
    {pynput.keyboard.Key.ctrl_l, pynput.keyboard.KeyCode(char='q')},
    {pynput.keyboard.Key.ctrl_r, pynput.keyboard.KeyCode(char='q')}

]

def on_press(key):
    global is_quit
    if any([key in comb for comb in KeyComb_Quit]):
        current.add(key)
        if any(all(k in current for k in comb) for comb in KeyComb_Quit):
            is_quit = True

def on_release(key):
    try:
        current.remove(key)
    except KeyError:
        pass


# The currently active modifiers
current = set()

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

##### MAIN Script #####
while True:
    do something
    time.sleep(0.00833)
    if is_quit:
        break

【讨论】:

    猜你喜欢
    • 2018-10-01
    • 2015-12-05
    • 1970-01-01
    • 2023-04-03
    • 2017-07-31
    • 2011-10-27
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多