Какой модуль Python может контролировать 3 комбинации клавиш в цикле while? - PullRequest
0 голосов
/ 02 октября 2018

Привет, я пытаюсь сделать что-то вроде следующего:

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

Я погуглил и не смог найти инструмент, который дает вам возможность проверить, был ли удержан ключ или нет.Больше всего пресс или релиз?Нажатие означает, что кнопка с момента отпускания изменена на удержание.Освобождение означает, что моментный ключ изменен с удержания на отпущенныйОчень сложно запечатлеть часть времени.Но на удержании это непрерывное состояние, его должно быть легко захватить.

Тогда я нашел pynput.Похоже, это тоже петля.Но я не знаю, как запустить 2 цикла одновременно.Один цикл, чтобы сделать мои вещи.Один цикл для отслеживания клавиш, а затем установить какой-либо флаг?

Или я могу запустить цикл следующим образом?

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

Но я не знаю, как просто запустить pynput всего за 0,0083333 секунды...

Пожалуйста, помогите?

1 Ответ

0 голосов
/ 08 октября 2018

Решено

Я нашел правильный способ использовать 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
...