var4yn_nik
@var4yn_nik
Герой аниме OreGairu

Как прекращать работу скрипта, после нажатия кнопки?

Я использую библиотеку keyboard для запуска скрипта, но её нельзя использовать для закрытия скрипта, потому что если написать keyboard.wait("F3"), то он будет ждать F3 и не пойдет дальше. У меня же система:
while True:
    <...>

И если вставить туда keyboard.wait("F3"), то скрипт прекратит работу, пока не дождется этой клавиши. Хочу узнать, как можно решить такую проблему
  • Вопрос задан
  • 575 просмотров
Решения вопроса 2
@Proliter
Один из способов решения задачи - использование многопоточности. Созданный поток будет обрабатывать нажатия клавиш и сигнализировать об этом основной.

import keyboard
import threading
from time import sleep


def invert_event(key_event):
    if start_event.is_set():
        start_event.clear()
    else:
        start_event.set()

def listen_F3():
    # при опущении зажатой кнопки f3 
    # меняем флаг события на противоположный
    keyboard.on_release_key(key='F3', callback=invert_event)


# объект собития, с его помощью 
# сигнализируем основной поток
# о нажатии клавиши
start_event = threading.Event()
# запускаем поток обработки нажатий
threading.Thread(target=listen_F3).run()
# ждем клавишу
start_event.wait()

while start_event.is_set():
    print('processing...')
    sleep(1)

print('script finished.')


Если заменить условие цикла на start_event.wait(), можно будет бесконечно останавливать и возобновлять цикл.
while start_event.wait():
    print('processing...')
Ответ написан
hint000
@hint000
у админа три руки
Гуглится за несколько секунд:
https://www.google.com/search?q=python+key+pressed
и первый же результат: https://stackoverflow.com/questions/24072790/detec...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы