注意:尽管我提供了很多有关Inquirer的信息,但是我很确定大多数信息都不会适用(只是为了安全起见)。对于我关于诅咒的实际问题,在底部。
我正在Python 3中使用Inquirer模块,以允许用户从列表中选择一个值。我运行这个:
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
使用向上和向下键,我可以更改选择,然后按Enter键进行选择,然后“ choice”变量包含我选择的值。问题是:选择完成后,选择仍然显示。完成后我想删除它们。我目前正在使用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来“删除当前位置上方的x线”。谢谢!
答案 0 :(得分:0)
诅咒会擦除整个显示(可能不是您想要的)。低级terminfo / termcap方法似乎很有希望,但是ECMA-48确实定义了一个序列( ED
,参数为 {{1 }} )删除当前位置上方的 ,没有与此相对应的预定义terminfo / termcap功能。您将发现,所有功能都可以擦除到屏幕的末尾,也可以擦除整个屏幕。
“ ANSI序列”是一个过时的术语。参考ECMA-48,您可以做到
1
将光标移到您要删除的最后一个位置之后。