Задать вопрос
@alex_l2005

Python. Pynput. Как обрабатывать и мышку и клавиатуру одновременно?

Здравствуйте, я хочу обрабатывать нажатия и мышки и клавиш на клавиатуре с помощью Pynput.
from pynput import keyboard
from pynput import mouse
from ctypes import windll
from win32.win32gui import GetWindowText, GetForegroundWindow
import time

log_str = ''

def on_click(x, y, button, pressed):
    print('hello')

def add_to_log(string):
    global log_str
    output = string + ' ' + GetWindowText(GetForegroundWindow())
    print(output)
    log_str = ''      

def get_key_name(key):
    if isinstance(key, keyboard.KeyCode):
        return key.char
    else:
        return str(key)

def on_press(key):
    global log_str
    # Определяем язык ввода
        
    key_name = get_key_name(key)
    if key_name == 'Key.enter':
        add_to_log(log_str)
    elif key_name == 'Key.space':
        log_str += ' '
    else:
        log_str += key_name

with mouse.Listener(on_click=on_click) as listener1:
    listener1.join()

with keyboard.Listener(on_press=on_press) as listener2:
    listener2.join()

Но у меня обрабатываются события связанные только с тем, что указано первым. (В данном случае программа обрабатывает события мышки). Как сделать так чтобы обрабатывалась и мышка и клавиатура?
  • Вопрос задан
  • 4353 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@Alximikl2
У тебя программа по очереди выполняет все строки. Тебе нужны или с asyncio, или с threading сделать функцию в другом потоке или сделать функцию асинхронной. Например:
import threading

def mouseListen():
    with mouse.Listener(on_click=on_click) as listener1:
        listener1.join()

thread_ = threading.Thread(target=mouseListen)
thread_.start()
#with mouse.Listener(on_click=on_click) as listener1:
#listener1.join()

with keyboard.Listener(on_press=on_press) as listener2:
    listener2.join()
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы