Невозможно выйти из цикла Loop при использовании Pynput.mouse - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть эта относительно простая программа, которая прослушивает щелчки мыши и, когда кнопка мыши удерживается нажатой, печатает «1».К сожалению, когда я отпускаю мышь, она просто продолжает печатать «1», хотя есть оператор if, который проверяет, нажата ли мышь, и должен остановить цикл, если это не так.Я использую модуль pynput.mouse для взаимодействия с мышью.

Вот мой код:

import time
from pynput.mouse import Listener

def clicked(x, y, button, pressed):
    if pressed == True:
        while button == button.left:
            print("1")
            time.sleep(1)
            if pressed == False:
                break




with Listener(on_click=clicked) as listener:
    listener.join()

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

Спасибо!

1 Ответ

0 голосов
/ 19 февраля 2019

Ваша текущая логика делает невозможным выход из цикла, так как pressed не изменяется внутри цикла.Существует not оператор, который проверяет, нажата ли мышь: ваши единственные if операторы проверяют, была ли нажата мышь при входе в функцию.pressed не изменяется внутри функции.

Посмотрите на критическую логику:

if pressed == True:
    while ...
        ...
        if pressed == False:
            break

Здесь нет ничего, чтобы изменить значение pressed;первый if гарантирует, что он True в любом месте цикла.

Да, вам нужно настроить другого слушателя, который работает в цикле.Вы уже знаете строительные блоки: создайте новый внутри функции и свяжите его с другой операцией, которая прерывает цикл.Например, вы можете «обмануть» и сбросить pressed в качестве глобальной переменной.

Вы также можете изучить, как это сделать, в других ответах, если вы хотите общее решение для обработчика.нажатие клавиш и освобождение клавиш выполнялись достаточно часто.

...