on_click(x, y, нажата кнопка) не работает, локальная переменная «нажата», на которую ссылаются перед назначением

#python #pynput

#python #pynput

Вопрос:

Я хотел создать скрипт, который воспроизводит звук после нажатия Z и следующей кнопки мыши, но у меня есть 2 проблемы

1. скрипт не обнаруживает щелчки мыши.

  1. у меня такая ошибка: File «c:/Users/name/OneDrive/Pulpit/python/apexretards.py «, строка 14, в on_press при нажатии == «yes»: UnboundLocalError: локальная переменная «нажата», на которую ссылаются перед назначением

Скрипт:

 from pynput.keyboard import Key, Listener
from playsound import playsound
pressed = "no"


def on_click(x, y, button, pressed):
    print("click")
    if pressed == "yes":
        playsound("skibidiba.mp3")
    pass

def on_press(key):
    if str(key) == "'z'" or str(key) == "'Z'":
        if pressed == "yes":
            pressed = "no"
            return
        else:
            pressed = "yes"
            return

def on_release(key):
    print("no u")

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

Комментарии:

1. on_press не имеет ссылки на pressed . Вам нужно либо передать ее, либо сделать ее глобальной

2. Параметр, нажатый в on_click, является логическим значением (True или False). И у вас есть дополнительные кавычки вокруг z и Z. Будьте осторожны, чтобы не использовать одни и те же имена для разных целей (нажата)

3. Вы должны задавать только один вопрос за сообщение. Ваша вторая проблема заключается в том, что global pressed она должна быть объявлена в любой функции, использующей глобальную переменную pressed . Ваша первая проблема, щелчки не обнаружены, неясна. print("click") Выполняется? Я вижу, вы проверяете if pressed == "yes": , вы уверены pressed , что в этом случае будет логическое значение? Поскольку вы используете ее в качестве аргумента этой функции, она не будет использовать значение pressed объявленной вами глобальной переменной, то есть она будет иметь только то значение, которое Listener ей присвоено. Вы должны дважды проверить это значение.

4. я исправил проблему 2, но да, она не печатает «щелчок». он печатает щелчок, когда я удаляю on_press и on_release