Проблема с Pynput
Здраствуйте, возникла проблема с использованием pynput в программе. Я очень долго работал над решением этой проблемы, но мне так и не удалось это сделать. Я не понимаю или это моя ошибка, или ошибка создателей python, pynput? Может я чего-то не знаю или не понимаю? Максимум того, что удалось сделать - программа работает, но не выполняет все задуманные функции.
Суть проблемы такова:
Мне нужно создать программу, которая:
Если пользователь нажмет клавишу ~Alt~, выполняет первое задуманное действие.
А если пользователь снова нажмет клавишу ~Alt~, то программа выполнит второе задуманное действие, но это должно произойти только тогда, если перед этим пользователь уже хотя бы раз нажал на клавишу ~Alt~ и никак иначе.
То бишь:
if пользователь нажал клавишу ~Alt~ впервые:
print ("~Что-то~")
if пользователь нажал клавишу ~Alt~ еще раз:
print ("~Что-то другое~")
Звучит вроде просто, но в реализации совсем не так. Вот моя (не полностью рабочая) программа:
from pynput import keyboard
alt_is_pressed = False
def on_press(key):
if key == keyboard.Key.alt_l and alt_is_pressed == False:
print("Эта функция работает")
alt_is_pressed = True
if key == keyboard.Key.alt_l and alt_is_pressed == True:
print("УРА! Наконец-то оно работает")
with keyboard.Listener(
on_press=on_press) as listener:
listener.join()
Ну если запустить эту программу, то видно, что она работает не так как следует. Насколько я понял это связано с тем, что каждый раз когда функция выполняется то значение переменной перезаписывается, а нужно что-бы её значение изменилось только один раз.
Ну если кто-то знает как исправить мою программу или знает другой робочий способ решения этой задачи, то буду очень рад помощи. Заранее спасибо.
Ответы (2 шт):
думаю что ваш код должен быть примерно таким:
alt_is_pressed = False
def on_press(key):
global alt_is_pressed
if key == keyboard.Key.alt_l and alt_is_pressed == False:
print("Эта функция работает")
alt_is_pressed = True
elif key == keyboard.Key.alt_l and alt_is_pressed == True:
print("УРА! Наконец-то оно работает")
alt_is_pressed = False
import keyboard
keyboard.wait('alt')
#Первое действие
keyboard.wait('alt')
#Второе действие