【问题标题】:Python Inquirer Module: Remove Choices When Done (Using Curses)Python Inquirer 模块:完成后删除选择(使用诅咒)
【发布时间】:2018-12-30 18:38:37
【问题描述】:

注意:尽管我在 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

使用向上和向下键,我可以更改我的选择,然后按回车键进行选择,然后“选择”变量包含我选择的值。问题是:一旦选择完成,选择仍然显示。我想在完成后删除它们。我目前正在使用 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行”。谢谢!

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-02-18
      • 2012-04-08
      • 2014-04-23
      • 2013-11-22
      • 2014-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-19
      相关资源
      最近更新 更多