как выйти из цикла отслеживания клавиш?

как выйти из цикла отслеживания клавиш и вывести последнюю нажатую?

import sqlite3
import keyboard

a = ''

def print_pressed_keys(e):
    global a
    a = e.name
    with sqlite3.connect('database.db') as db:
        cursor = db.cursor()
        cursor.execute('''CREATE TABLE IF NOT EXISTS hotkey (key1 TEXT)''')
        query = """ UPDATE hotkey SET key1 = ? """
        cursor.execute(query, (a,))
        db.commit()


keyboard.hook(print_pressed_keys)
keyboard.wait()
print(a)

мне не нужно осуществлять выход по горячей клавише


Ответы (1 шт):

Автор решения: eri

keyboard.wait() делает простой while True: time.sleep(1e10)

напишите свой цикл ожидания вместо этого.

import sqlite3
import keyboard
import threading

a = ''

def print_pressed_keys(event):
    def handler(e):
        global a
        a = e.name
        with sqlite3.connect('database.db') as db:
            cursor = db.cursor()
            cursor.execute('''CREATE TABLE IF NOT EXISTS hotkey (key1 TEXT)''')
            query = """ UPDATE hotkey SET key1 = ? """
            cursor.execute(query, (a,))
            db.commit()
        if e.name == 'q': # условие выхода
            event.set()
    return handler


waitlock = threading.Event()
keyboard.hook(print_pressed_keys(waitlock))
waitlock.wait()

но если Вы ждете одного нажатия, то лучше используйте keyboard.read_event() вместо хука.

→ Ссылка