Pyfiglet列格式问题:如何实现打字效果并保持文本行排列
问题描述
我用Python的pyfiglet库写了一段代码,想实现逐词打字的ASCII艺术效果:
import pyfiglet, time, sys def mecanografiar(textouwu): listapalabrasuwu = textouwu.split() for palabritas in listapalabrasuwu: sys.stdout.write(pyfiglet.figlet_format(palabritas, justify="center", font="standard", width=110)) sys.stdout.flush() time.sleep(0.3) uwu = "This is a test message" mecanografiar(uwu)
现在运行后每个单词是按列堆叠显示的,但我需要所有单词在同一行排列,同时保留逐词加载的效果。期望的输出如下:
_____ _ _ _ _ _ |_ _| |__ (_)___ (_)___ __ _ | |_ ___ ___| |_ _ __ ___ ___ ___ ___ __ _ __ _ ___ | | | '_ \| / __| | / __| / _` | | __/ _ \| __| __| | '_ ` _ \ / _ \| __/ __|/ _` |/ _` |/ _ \ | | | | | | \__ \ | \__ \ | (_| | | || __/\__ \ |_ | | | | | | __/\__ \__ \ (_| | (_| | __/ |_| |_| |_|_|___/ |_|___/ \__,_| \__\___||___/\__| |_| |_| |_|\___||___/___/\__,_|\__, |\___| |___/
解决方法
原代码直接输出每个单词的完整ASCII艺术块,每个块本身是多行结构,导致堆叠显示。我们需要把每个单词的ASCII行拆分后,逐词拼接对应行的内容,再刷新输出:
import pyfiglet, time, sys def mecanografiar(textouwu): # 拆分每个单词的ASCII艺术为单独行 palabras_figlet = [] for palabra in textouwu.split(): fig_content = pyfiglet.figlet_format(palabra, font="standard", width=110) palabras_figlet.append(fig_content.splitlines()) # 获取ASCII艺术的总行数(同字体下所有单词行数一致) line_count = len(palabras_figlet[0]) current_lines = [""] * line_count for idx, palabra_lines in enumerate(palabras_figlet): # 将当前单词的每一行追加到对应行的内容中 for i in range(line_count): current_lines[i] += palabra_lines[i] # 使用ANSI转义序列回到屏幕顶部并清屏,打印当前所有行 sys.stdout.write("\033[H\033[J") sys.stdout.write("\n".join(current_lines)) sys.stdout.flush() # 最后一个单词无需等待 if idx != len(palabras_figlet) - 1: time.sleep(0.3) uwu = "This is a test message" mecanografiar(uwu)
思路说明
- 先将每个单词的ASCII艺术拆分成单独的行,存储为二维列表;
- 初始化空列表存储每一行的最终内容;
- 遍历每个单词,把该单词的每一行追加到对应行的内容里;
- 用
\033[H\033[J清屏并回到屏幕顶部,重新打印所有行,实现逐词追加的视觉效果; - 每添加一个单词后等待0.3秒,保留打字间隔。
内容的提问来源于stack exchange,提问作者Inbydev
相关产品推荐
相关产品推荐

