Остановка цикла нажатием клавиши, библиотека pynput
Написал код, который в бесконечном цикле через библиотеку pynput юзает клаву и мышку, но теперь нужно включать/выключать этот цикл нажатием клавиши, скажем пробела. Без цикла я это реализовать могу, но, при попытке объеденить два кода не работает либо одно, либо другое. Я знаю в чём заключается проблема, в потоках, нужно запустить выполнение цикла в одном потоке, а проверку на нажатие в другом, но вот как это реализовать-не знаю
import time, pynput, threading
mouse = pynput.mouse.Controller()
keyboard = pynput.keyboard.Controller()
count=0
flag=True
def press(key):
print("ееххууу")
def release(key):
if key == pynput.keyboard.Key.space:
flag=False
while flag:
print("Цикл: "+str(count))
time.sleep(1)
print("Up")
keyboard.press(pynput.keyboard.Key.up)
keyboard.release(pynput.keyboard.Key.up)
time.sleep(1)
print("Enter")
keyboard.press(pynput.keyboard.Key.enter)
keyboard.release(pynput.keyboard.Key.enter)
time.sleep(1)
print("L click")
mouse.click(pynput.mouse.Button.left)
count=count+1
with pynput.keyboard.Listener(
on_press=press,
on_release=release) as listener:
listener.join()
Ответы (1 шт):
Автор решения: NONAME
→ Ссылка
import time, pynput, threading
mouse = pynput.mouse.Controller()
keyboard = pynput.keyboard.Controller()
count=0
count1=10
flag=True
def press(key):
global flag
if key == pynput.keyboard.Key.space:
print("gg")
flag=False
def loop_fun():
global count1
for number in range(10):
print("Старт через: "+str(count1))
time.sleep(1)
count1=count1-1
global count
global flag
while flag:
print("Цикл: "+str(count))
time.sleep(0)
print("Up")
keyboard.press(pynput.keyboard.Key.up)
keyboard.release(pynput.keyboard.Key.up)
time.sleep(0)
print("Enter")
keyboard.press(pynput.keyboard.Key.enter)
keyboard.release(pynput.keyboard.Key.enter)
time.sleep(0)
print("L click")
mouse.click(pynput.mouse.Button.left)
count=count+1
if __name__ == '__main__':
abortKey = 'space'
listener = pynput.keyboard.Listener(on_press=press, abortKey=abortKey)
listener.start() # start to listen on a separate thread
# start thread with loop
threading.Thread(target=loop_fun, args=(), name='loop_fun', daemon=True).start()
listener.join() # wait for abortKey