Модуль keyboard
имеет простые решения для подобных случаев: они используют активацию event-triggered
вместо polling
, как используется в вашей попытке.
пример кода:
import keyboard
def handleLeftKey(e):
if keyboard.is_pressed("4"):
print("left arrow was pressed w/ key 4")
# work your magic
keyboard.on_press_key("left", handleLeftKey)
# self-explanitory: when the left key is pressed down then do something
keyboard.on_release_key("left", handleLeftKey02)
# also self-explanitory: when the left key is released then do something
# don't use both ...on_release & ...on_press or it will be
# triggered twice per key-use (1 up, 1 down)
Замените приведенный ниже код и измените его в соответствии с вашими потребностями.
if __name__ == "__main__":
while True:
code = []
try:
for key in keys:
if keyboard.is_pressed(key):
print(keyboard.key_to_scan_codes(key))
print(f"{key} pressed")
code.append(1)
else:
code.append(0)
Другой, более динамичный подход будет выглядеть так:
import keyboard
keys = [
"down",
"up",
"left",
"right",
"w",
"s",
"a",
"d",
"1",
"2",
"3",
"4",
"q",
"e",
"f"
]
def kbdCallback(e):
found = False
for key in keys:
if key == keyboard.normalize_name(e.name):
print(f"{key} was pressed")
found = True
# work your magic
if found == True:
if e.name == "left":
if keyboard.is_pressed("4"):
print("4 & left arrow were pressed together!")
# work your magic
keyboard.on_press(kbdCallback)
# same as keyboard.on_press_key, but it does this for EVERY key
Еще одна проблема, которую я заметил, заключается в том, что вы используете"left arrow"
когда он действительно был распознан как "left"
(по крайней мере, в моей системе он может отличаться в вашей, но я предполагаю, что вы хотите, чтобы он работал на всех системах, поэтому было бы безопаснее использовать "left"
вместо этого)
Последний метод, который вы могли бы использовать, очень статически типизирован и не имеет динамических возможностей, но сработал бы в случае "4+left"
или "left+4"
import keyboard
def left4trigger:
print("the keys were pressed")
keyboard.add_hotkey("4+left", left4trigger)
# works as 4+left or left+4 (all of the examples do)
Вы, кажется, достаточно умен, чтобы понятьостальные оттуда.