Python Inquirer模块:完成后删除选择(使用诅咒)

时间:2018-12-30 18:38:38

标签: python-3.x python-module curses inquirer

注意:尽管我提供了很多有关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线”。谢谢!

1 个答案:

答案 0 :(得分:0)

这样,

诅咒会擦除整个显示(可能不是您想要的)。低级terminfo / termcap方法似乎很有希望,但是ECMA-48确实定义了一个序列( ED ,参数为 {{1 }} )删除当前位置上方的 ,没有与此相对应的预定义terminfo / termcap功能。您将发现,所有功能都可以擦除到屏幕的末尾,也可以擦除整个屏幕。

“ ANSI序列”是一个过时的术语。参考ECMA-48,您可以做到

1

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