es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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.

Tags:  ,

Answer

  1. Avatar for 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ón getch() para leer pulsaciones de teclas individuales. Aquí tienes un ejemplo de código:

    import curses
    import time
    
    
    def run(stdscr):
        stdscr.clear()
        the_string = "¡Hola mundo!"
        for char in the_string:
            stdscr.addstr(char)
            stdscr.refresh()
            time.sleep(0.1)
            curses.napms(100) # dormir durante 100 milisegundos
            key = stdscr.getch()
            if key == curses.KEY_EXIT or key == 27: # salir si se presiona Esc o Ctrl+C
                break
        stdscr.getch()
    
    
    curses.wrapper(run)
    

    En este código, la función curses.napms() se utiliza para dormir durante 100 milisegundos entre imprimir cada carácter. La variable key 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ón stdscr.refresh() se utiliza para actualizar la consola después de agregar cada carácter, de manera que se muestre de inmediato.

Comments are closed.