pulsada - python hacer reconocimiento de teclas
¿Detectar tecla pulsar en python? (6)
Como OP menciona sobre raw_input, eso significa que él quiere una solución cli. Linux: curses es lo que quieres (Windows PDCurses). Curses, es una API gráfica para el software cli, puede lograr más que solo detectar eventos clave.
Este código detectará las teclas hasta que se presione una nueva línea.
import curses
def main(win):
win.nodelay(True)
key=""
win.clear()
win.addstr("Detected key:")
while 1:
try:
key = win.getkey()
win.clear()
win.addstr("Detected key:")
win.addstr(str(key))
if key == os.linesep:
break
except Exception as e:
# No input
pass
curses.wrapper(main)
Estoy haciendo un programa tipo cronómetro en Python y me gustaría saber cómo detectar si se presiona una tecla (como p para pausa y s para detener), y no me gustaría que fuera algo así como raw_input que espera el Entrada del usuario antes de continuar la ejecución. Alguien sabe cómo hacer esto en un bucle mientras?
Además, me gustaría hacer esta multiplataforma, pero si eso no es posible, entonces mi principal objetivo de desarrollo es Linux
Le sugiero que use PyGame y agregue un controlador de eventos.
Para Windows puedes usar msvcrt
así:
import msvcrt
while True:
if msvcrt.kbhit():
key = msvcrt.getch()
print(key) # just to show the result
Para aquellos que están en Windows y estaban luchando por encontrar una respuesta que funcione, aquí está la mía: pynput
from pynput.keyboard import Key, Listener
def on_press(key):
print(''{0} pressed''.format(
key))
def on_release(key):
print(''{0} release''.format(
key))
if key == Key.esc:
# Stop listener
return False
# Collect events until released
with Listener(
on_press=on_press,
on_release=on_release) as listener:
listener.join()
La función anterior imprimirá la tecla que esté presionando y comenzará una acción cuando suelte la tecla ''esc''. La documentación del teclado está here para un uso más variado.
Python tiene un módulo de keyboard con muchas características. Instálalo, quizás con este comando:
pip3 install keyboard
Entonces utilízalo en código como:
import keyboard #Using module keyboard
while True:#making a loop
try: #used try so that if user pressed other than the given key error will not be shown
if keyboard.is_pressed(''q''):#if key ''q'' is pressed
print(''You Pressed A Key!'')
break#finishing the loop
else:
pass
except:
break #if user pressed a key other than the given key the loop will break
Utilice PyGame para tener una ventana y luego puede obtener los eventos clave.
Para la letra p
:
import pygame, sys
import pygame.locals
pygame.init()
BLACK = (0,0,0)
WIDTH = 1280
HEIGHT = 1024
windowSurface = pygame.display.set_mode((WIDTH, HEIGHT), 0, 32)
windowSurface.fill(BLACK)
while True:
for event in pygame.event.get():
if event.key == pygame.K_p:
#Do what you want to here
pass
if event.type == pygame.locals.QUIT:
pygame.quit()
sys.exit()