Используйте цикл while внутри прослушивателя мыши pynput

Цикл while возвращает true, даже если я отпустил левую кнопку мыши, что сделало бы Pressed = False. Я не знаю, как выйти из цикла, чтобы обновить нажатое значение.

from pynput import keyboard
from pynput import mouse
from pynput.mouse import Button, Controller

control = Controller()

def on_click(x, y, button, pressed):
    if button == mouse.Button.left:
        while pressed == True:
            print(pressed)

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

Есть ли способ обновить цикл, чтобы он знал, когда нажимается = false.


person Porpoises United    schedule 01.02.2021    source источник
comment
не используйте цикл while, а используйте обычный цикл if not pressed. Когда вы запускаете цикл while, он не может снова запустить on_click и не может остановить этот цикл. И если вам действительно нужно запустить какой-то код в цикле, запустите его в отдельном потоке.   -  person furas    schedule 01.02.2021


Ответы (1)


Если вам действительно нужно запустить какой-то цикл, вы должны сделать это в разделенном thread, потому что, если вы запустите его в on_click, вы заблокируете listener, и он не сможет запустить другой on_click

on_click должен запустить цикл в thread и использовать глобальную переменную для контроля, когда он должен остановиться.

from pynput import mouse
from pynput.mouse import Button, Controller
import threading

control = Controller()

running = False

def process():
    print('start')
    count = 0
    while running:
        print(count)
        count += 1
    print('stop')
    
def on_click(x, y, button, pressed):
    global running # to assing value to global variable (instead of local variable)
    
    if button == mouse.Button.left: 
        if pressed:
            if not running:  # to run only one `process`
                running = True
                threading.Thread(target=process).start()
        else:
            running = False

with mouse.Listener(on_click=on_click) as listener:
    listener.join()
person furas    schedule 01.02.2021
comment
Я не могу отблагодарить вас достаточно. Я бы застрял на этом целую вечность, если бы не вы! - person Porpoises United; 01.02.2021