¿Cómo puedo imprimir una cadena letra por letra utilizando Python Curses?
Para darle estilo a mis aplicaciones de consola, a menudo hago que una cadena se imprima de a un carácter a la vez utilizando código como este:
import time
def run():
la_cadena = "¡Hola mundo!"
for char in la_cadena:
print(char, end='', flush=True)
time.sleep(0.1)
input()
run()
Estoy buscando hacer lo mismo con Python Curses, así puedo tener más flexibilidad en otros aspectos de la aplicación. Esto es lo que tengo hasta ahora:
import curses
import time
def run(stdscr):
stdscr.clear()
la_cadena = "¡Hola mundo!"
for char in la_cadena:
stdscr.addstr(char)
time.sleep(0.1)
stdscr.getch()
curses.wrapper(run)
El problema es que esto simplemente espera durante la duración del bucle antes de mostrar el texto en la consola. La diferencia está en flush=True
, así que he intentado incluir curses.flushinp()
en diferentes lugares de la función, pero no hace ninguna diferencia.
davy.ai
Para imprimir una cadena de caracteres uno por uno utilizando Python Curses, puedes usar la función
nodelay()
para configurar la consola en modo de no bloqueo y luego usar la funcióngetch()
para leer pulsaciones de teclas individuales. Aquí tienes un ejemplo de código:En este código, la función
curses.napms()
se utiliza para dormir durante 100 milisegundos entre imprimir cada carácter. La variablekey
se utiliza para leer una sola pulsación de tecla y el bucle se saldrá si se presiona la tecla Esc o Ctrl+C. La funciónstdscr.refresh()
se utiliza para actualizar la consola después de agregar cada carácter, de manera que se muestre de inmediato.