Щелчок мышью при прокрутке

Итак, я пытаюсь написать программу на Python, которая имитирует щелчок правой кнопкой мыши всякий раз, когда я прокручиваю мышью. Я попытался использовать pynput, и это то, что у меня есть:

from pynput.mouse import Button, Controller, Listener

mouse = Controller()

def on_scroll(x, y, dx, dy):
    mouse.click(Button.left)
    print('Scrolled {0}'.format(
        (x, y)))


with Listener(
        on_scroll=on_scroll) as listener:
    listener.join()

Каждый раз, когда я запускаю эту программу и прокручиваю, мой компьютер начинает лагать, и моя мышь тоже. Затем мне приходится принудительно выключать компьютер из-за задержки. Что я должен делать?

Заранее спасибо!


person GGberry    schedule 30.11.2020    source источник


Ответы (1)


В документах упоминается, что вам не следует поместите действие блокировки в код прокрутки. Поскольку я могу воспроизвести вашу проблему, я предполагаю, что mouse.click(Button.left) является блокирующим действием.

Что можно показать с помощью:

from pynput.mouse import Controller, Events, Button

mouse = Controller()

if __name__ == '__main__':
    with Events() as events:
        for event in events:
            if isinstance(event, Events.Scroll):
                print(f'Scrolling event: {event}')
                mouse.click(Button.left)
            print(event)

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

Редактировать

Я не нашел решения для этого прямо сейчас, оно упоминается в этом сообщение о том, что проблема может быть специфичной для ОС. Я могу воспроизвести ваши претензии в Windows, поэтому вы можете создать проблему на pynput странице их пакета.

person Thymen    schedule 30.11.2020
comment
Спасибо! Вот и получилось :) - person GGberry; 30.11.2020
comment
Как упоминалось в решении, это одноразовое исправление. Сработает один раз, после чего программа зависнет на mouse.click. Поэтому я предполагаю, что в их коде есть более серьезная проблема, из-за которой mouse.click зависает в Windows. - person Thymen; 30.11.2020