@Kekxx

Как выйти из цикла while true с помощью нажатия клавиши?

Не получается добавить выход из цикла по нажатию клавиши. Понял что time.sleep мешает 'адекватному" выходу из цикла, что для таких вещей нужно использовать потоки или делать асинхронный код. Коды ниже как пример (я много раз менял порядок некоторых строк, но всё без толку(почти везде одно и тоже либо код 1 раз прогоняется и работает кнопка, либо кнопка работает во время того, когда не работает time. sleep)

def loop1():
    while True:
        pyautogui.moveTo(h,z-z,0.21)
        time.sleep(0.1)
        pyautogui.mouseDown(button='right')
        time.sleep(3)
        pyautogui.moveTo(t,r,0.1)
        time.sleep(0.11)
        pyautogui.mouseUp(button='right')
        pyautogui.press('Q')
        time.sleep(0.22)
    
def loop2():
    while True:
        if keyboard.is_pressed('J'):
            sys.exit()


Thread(target=loop1).start()
Thread(target=loop2).start()


async def kek1():
    pyautogui.moveTo(h,z-z,0.21)
    await asyncio.sleep(0.1)
async def kek2():
    pyautogui.mouseDown(button='right')
    await asyncio.sleep(3)
async def kek3():
    pyautogui.moveTo(t,r,0.1)
    await asyncio.sleep(0.11)
async def kek4():
    pyautogui.mouseUp(button='right')
    pyautogui.press('Q')
    await asyncio.sleep(0.22)
async def kek5():
    while True:
        if keyboard.is_pressed('J'):
            sys.exit()
             
async def main():
    
    while True:
        await asyncio.gather(kek1(), kek2(), kek3(), kek4(), kek5())


async def kek1():
    while True:
        pyautogui.moveTo(h,z-z,0.21)
        await asyncio.sleep(0.1)
        pyautogui.mouseDown(button='right')
        await asyncio.sleep(3)
        pyautogui.moveTo(t,r,0.1)
        await asyncio.sleep(0.11)
        pyautogui.mouseUp(button='right')
        pyautogui.press('Q')
        await asyncio.sleep(0.22)

async def kek2():
        while true:
            if keyboard.is_pressed('J'):
                sys.exit()
          
async def main():
    task1 = asyncio.create_task(kek1())
    task2 = asyncio.create_task(kek2())
    await task1
 
asyncio.run(main())
  • Вопрос задан
  • 39 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы