как сделать одноразовую проверку нажатой клавиши?
Мне нужно чтобы при запуске программы я нажал на любую клавишу, эта клавиша сохранилась в переменную в питоне и в базе данных, а затем программа остановилась.
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 = f""" UPDATE hotkey SET key1 = '{a}' """
cursor.execute(query)
db.commit()
keyboard.hook(print_pressed_keys)
keyboard.wait(a)
print(a)
В базе данных клавиша сохраняется, но с переменной в питоне проблема. И программа не останавливается после одного нажатия. (мне не нужно ставить остановку программы на определенную клавишу)
Ответы (2 шт):
Неправильно вы с SQL работаете
Не:
query = f""" UPDATE hotkey SET key1 = '{a}' """
cursor.execute(query)
А:
query = "UPDATE hotkey SET key1 = ?"
cursor.execute(query, (a,))
Разница в том, что используется биндинг-параметров и драйвер базы может подготовить запрос, сделав нужное экранирование или трансформацию данных (например, объект даты-время превратить в строку/число, что понимает база данных)
А для остановки приложения можно использовать sys.exit
как я уже выяснил, функция read_key в данном случае будет подходить
import keyboard
print(keyboard.read_key())