Python 查询器模块:完成后删除选项(使用 Curses)

Python Inquirer Module: Remove Choices When Done (Using Curses)

注意:虽然我在 Inquirer 上提供了很多信息,但我很确定其中的大部分信息都不适用(只是为了安全起见)。对于我关于诅咒的实际问题,它在底部。

我在 Python 3 中使用 Inquirer 模块来允许用户 select 列表中的值。我运行这个:

import inquirer    
choice = inquirer.prompt([inquirer.List("size",message="Which size do you need?",choices=["Large", "Medium", "Small"])

我得到了这个:

[?] What size do you need?: Medium
   Large
 > Medium
   Small

然后使用向上和向下键,我可以更改我的 selection,然后按回车键进行选择,之后 "choice" 变量包含我 selected 的值。问题是:selection 完成后,选项仍然显示。完成后我想删除它们。我目前正在使用 ANSI 转义码在完成后从屏幕上删除选项,其中 x 是选项的数量:

import sys    
for i in range (x+1):
    sys.stdout.write('\x1b[1A')
    sys.stdout.write('\x1b[2K')

打印文本为:

[?] What size do you need?: Medium

问题是,ANSI 转义码不是通用的。我想使用一个适用于所有终端的解决方案,最好是curses,但是curses对新用户不是很友好,所以我想知道是否有人知道如何使用curses来"delete x lines above current position"。谢谢!

curses,因此,会擦除整个显示(这可能不是您想要的)。低级别的 terminfo/termcap 方法似乎很有希望,但是虽然 ECMA-48 确实定义了一个序列(ED,使用参数 1) 擦除 above 当前位置,没有与此对应的预定义 terminfo/termcap 功能。你会发现所有的东西都有擦除到屏幕末尾或擦除整个屏幕的能力。

"ANSI sequences" 是一个过时的术语。参考 ECMA-48,你可以做

sys.stdout.write('\x1b[1J')

将光标移动到您要擦除的最后一个位置后。