我如何使用 Python Curses 一次打印一个字母的字符串?

How would I print out a string one letter at a time using Python Curses?

对于我的控制台应用程序中的某些样式,我经常使用如下代码一次打印一个字符的字符串:

import time


def run():
    the_string = "Hello world!"
    for char in the_string:
        print(char, end='', flush=True)
        time.sleep(0.1)
    input()


run()

我希望对 Python Curses 做同样的事情,这样我就可以在应用程序的其他方面有更多的灵活性。这是我目前所拥有的:

import curses
import time


def run(stdscr):
    stdscr.clear()
    the_string = "Hello world!"
    for char in the_string:
        stdscr.addstr(char)
        time.sleep(0.1)
    stdscr.getch()


curses.wrapper(run)

问题是这只是等待 for 循环的持续时间,然后再将文本放在控制台上。不同之处在于 flush=True,因此我尝试在函数的几个不同位置包含 curses.flushinp(),但没有任何区别。

将字符串写入屏幕后需要调用stdscr.refresh()刷新屏幕

import curses
import time


def run(stdscr):
    stdscr.clear()
    the_string = "Hello world!"
    for char in the_string:
        stdscr.addstr(char)
        stdscr.refresh()
        time.sleep(0.1)
    stdscr.getch()


curses.wrapper(run)

如您所愿,效果很好。