Как я могу игнорировать все пользовательские вводы для продолжительности работы функции? - PullRequest
2 голосов
/ 02 октября 2019

У меня есть модуль Python, который прослушивает комбинацию клавиш с помощью pynput, а затем, после нажатия, вводит строку в текстовую программу.

Отлично работает! Кроме ...

В приведенном ниже примере комбинация клавиш пользователя установлена ​​на shift + space. Это имеет большой смысл и, вероятно, будет наиболее распространенной ключевой командой для пользователей Windows, работающих с моей программой. Проблема в том, что когда клавиша Shift удерживается, она меняет типы pynput. Вместо 20.01.2009 будет напечатано)! / 20 / 2019.

Мне нужен способ отключить клавиатуру, пока pyautogui не закончит ввод строки. Большое спасибо за вашу помощь !!!

Бонусный вопрос: я не могу получить результат, когда комбинация клавиш включает в себя клавишу Ctrl. Key.ctrl просто не запускается, в то время как другие ключи работают нормально.

from pynput.keyboard import Key, Controller, Listener
import time

keyboard = Controller()

def insert():                                 # check line 1 of config file 
     keyboard.type('01/20/2019')

# The currently active modifiers
current = set()

def on_press(key):
    if key in COMBINATION:
        current.add(key)
        if all(k in current for k in COMBINATION):      # I don't know what this k in current for k shit is.
            current.remove(key)
            insert()                                # run insert

    if key == Key.esc:
        listener.stop()


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

with Listener(on_press=on_press, on_release=on_release) as listener:
    listener.join()
``

1 Ответ

3 голосов
/ 02 октября 2019

Вы можете использовать pyautogui.keyUp("shift") перед вводом.

def insert():
f=open('tc.txt')
line=f.readlines()
insert.timestamp=(line[0])
time.sleep(.1)
pyautogui.keyUp("shift")
pyautogui.typewrite(insert.timestamp)
...