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')
将光标移动到您要擦除的最后一个位置后。
注意:虽然我在 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')
将光标移动到您要擦除的最后一个位置后。