π ΠΠ°ΠΊ ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΊΠ»Π°Π²ΠΈΡΠΈ Π² Python: ΠΏΡΠΎΡΡΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π΄Π»Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ
ΠΠ°ΠΊ ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΊΠ»Π°Π²ΠΈΡΠΈ Π² Python?
ΠΠ»Ρ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ Π² Python Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ keyboard
ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ getch
. ΠΠ±Π° ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ
ΠΊΠ»Π°Π²ΠΈΡ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΉ ΠΊΠ»Π°Π²ΠΈΡ.
ΠΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ keyboard
:
import keyboard
def on_key_press(event):
print(f"ΠΠ°ΠΆΠ°ΡΠ° ΠΊΠ»Π°Π²ΠΈΡΠ°: {event.name}")
keyboard.on_press(on_key_press)
# ΠΠ»Ρ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅:
keyboard.wait('esc')
ΠΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ getch
:
import getch
while True:
key = getch.getch()
print(f"ΠΠ°ΠΆΠ°ΡΠ° ΠΊΠ»Π°Π²ΠΈΡΠ°: {key}")
if key == 'q':
break
ΠΡΠ±Π΅ΡΠΈΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π΅Π³ΠΎ Π² ΡΠ²ΠΎΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π΄Π»Ρ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ Π² Python.
ΠΠ΅ΡΠ°Π»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ
ΠΠ°ΠΊ ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΊΠ»Π°Π²ΠΈΡΠΈ Π² Python
Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° ΡΠ·ΡΠΊΠ΅ Python ΡΡΠΈΡΡΠ²Π°Π½ΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡ ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΈΠ»ΠΈ ΠΈΠ³Ρ. Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ Π² Python.
Π‘ΠΏΠΎΡΠΎΠ± 1: ΠΠΎΠ΄ΡΠ»Ρ `keyboard`
ΠΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ Π² Python - ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ `keyboard`. ΠΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΎΠ΅ ΠΈ ΠΌΠΎΡΠ½ΠΎΠ΅ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ, ΡΠ΅ΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ `input`.
import keyboard
while True:
if keyboard.is_pressed('q'):
print("ΠΡ Π½Π°ΠΆΠ°Π»ΠΈ ΠΊΠ»Π°Π²ΠΈΡΡ 'q'.")
break
elif keyboard.is_pressed('enter'):
print("ΠΡ Π½Π°ΠΆΠ°Π»ΠΈ ΠΊΠ»Π°Π²ΠΈΡΡ 'Enter'.")
break
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠΈΠΊΠ» Π΄Π»Ρ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠ³ΠΎ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ. Π€ΡΠ½ΠΊΡΠΈΡ `keyboard.is_pressed()` ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, Π±ΡΠ»Π° Π»ΠΈ Π½Π°ΠΆΠ°ΡΠ° ΡΠΊΠ°Π·Π°Π½Π½Π°Ρ ΠΊΠ»Π°Π²ΠΈΡΠ°. ΠΡΠ»ΠΈ ΠΊΠ»Π°Π²ΠΈΡΠ° 'q' ΠΈΠ»ΠΈ 'Enter' Π±ΡΠ»Π° Π½Π°ΠΆΠ°ΡΠ°, ΠΌΡ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈ Π²ΡΡ ΠΎΠ΄ΠΈΠΌ ΠΈΠ· ΡΠΈΠΊΠ»Π°.
Π‘ΠΏΠΎΡΠΎΠ± 2: ΠΠΎΠ΄ΡΠ»Ρ `msvcrt`
ΠΡΡΠ³ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ Π² Python - ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ `msvcrt` (ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Windows). ΠΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΠΌ Π²Π²ΠΎΠ΄ΠΎΠΌ-Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ.
import msvcrt
while True:
if msvcrt.kbhit():
key = msvcrt.getch()
if key == b'q':
print("ΠΡ Π½Π°ΠΆΠ°Π»ΠΈ ΠΊΠ»Π°Π²ΠΈΡΡ 'q'.")
break
elif key == b'\r':
print("ΠΡ Π½Π°ΠΆΠ°Π»ΠΈ ΠΊΠ»Π°Π²ΠΈΡΡ 'Enter'.")
break
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ `msvcrt.kbhit()` Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, Π±ΡΠ»Π° Π»ΠΈ Π½Π°ΠΆΠ°ΡΠ° ΠΊΠ»Π°Π²ΠΈΡΠ°. ΠΡΠ»ΠΈ ΠΊΠ»Π°Π²ΠΈΡΠ° Π±ΡΠ»Π° Π½Π°ΠΆΠ°ΡΠ°, ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ `msvcrt.getch()` Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΡΠΈΠΌΠ²ΠΎΠ»Π° ΠΊΠ»Π°Π²ΠΈΡΠΈ. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΊΠΎΠ΄ ΡΠΈΠΌΠ²ΠΎΠ»Π° ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅.
Π‘ΠΏΠΎΡΠΎΠ± 3: ΠΠΎΠ΄ΡΠ»Ρ `getch`
ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠΏΠΎΡΠΎΠ± ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ Π² Python - ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ `getch`. ΠΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΡΠΎΡΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ Π½Π°ΠΆΠ°ΡΡΡ ΠΊΠ»Π°Π²ΠΈΡ.
import getch
while True:
key = getch.getch()
if key == 'q':
print("ΠΡ Π½Π°ΠΆΠ°Π»ΠΈ ΠΊΠ»Π°Π²ΠΈΡΡ 'q'.")
break
elif key == '\r':
print("ΠΡ Π½Π°ΠΆΠ°Π»ΠΈ ΠΊΠ»Π°Π²ΠΈΡΡ 'Enter'.")
break
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ `getch.getch()` Π΄Π»Ρ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ Π½Π°ΠΆΠ°ΡΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΡΠΈ. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅.
Π‘ΠΏΠΎΡΠΎΠ± 4: ΠΠΎΠ΄ΡΠ»Ρ `tty` ΠΈ `termios`
ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠΏΠΎΡΠΎΠ± ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ Π² Python - ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ `tty` ΠΈ `termios`. ΠΡΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠ΅ΠΆΠΈΠΌ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°, ΡΡΠΎΠ±Ρ ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΊΠ»Π°Π²ΠΈΡΠΈ Π±Π΅Π· ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π²Π²ΠΎΠ΄ΠΈΠΌΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ².
import tty
import termios
import sys
def get_key():
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
while True:
key = get_key()
if key == 'q':
print("ΠΡ Π½Π°ΠΆΠ°Π»ΠΈ ΠΊΠ»Π°Π²ΠΈΡΡ 'q'.")
break
elif key == '\r':
print("ΠΡ Π½Π°ΠΆΠ°Π»ΠΈ ΠΊΠ»Π°Π²ΠΈΡΡ 'Enter'.")
break
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ `get_key()`, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΌΠΎΠ΄ΡΠ»ΠΈ `tty` ΠΈ `termios` Π΄Π»Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ΅ΠΆΠΈΠΌΠ° ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π² ΡΠΈΠΊΠ»Π΅ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ, ΡΡΠΎΠ±Ρ Π²ΡΠ²Π΅ΡΡΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ Π² Python. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠ±ΡΠ°ΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ²ΠΎΠΈΡ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΠ΅ΠΉ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠΈ ΡΠΏΠΎΡΠΎΠ±Ρ, ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ Π² Π²Π°ΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΠΈΠ³ΡΡ.