@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())
  • Вопрос задан
  • 150 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Float_1
попробуй так
async def kek2(event):
"""реагирует на нажатие клавиш"""
while true:
if keyboard.is_pressed('J'):
sys.exit()
if event.key == pygame.K_q:
sys.exit()
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
22 нояб. 2024, в 02:56
10000 руб./за проект
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект