【问题标题】:display the user input text in color in the windows cmd在 windows cmd 中以彩色显示用户输入文本
【发布时间】:2018-09-27 08:19:59
【问题描述】:

我还有一个关于 Windows cmd 的小控制台程序的问题。

我使用 colorama 为终端中的文本着色,使其看起来像这样:

然后我发现了如何在input()-method 中使用一点“hack”为文本着色,并使用不带换行符的打印,如下所示:

from colorama import init
init(autoreset=True)
YELLOW = "\x1b[1;33;40m" 

print(f"\n{YELLOW}Turnier spielen? [T]: ", end='')
tournament = input()

这会导致上图中的黄线。

但我仍在寻找一种方法来为用户输入的字符着色 - 所以在这里我想将用户输入的“sdffdgf ...”格式化为彩色。

有没有人为我提供解决方案,或者使用有限的 windows cmd 无法解决?

【问题讨论】:

    标签: python formatting colorama


    【解决方案1】:

    从您的代码中删除 init(autoreset=True) 行会在我的机器上按您的意愿运行。

    import colorama
    
    from colorama import Fore,Style,Back
    colorama.init()
    
    YELLOW = "\x1b[1;33;40m" 
    RED = "\x1b[1;31;40m"
    
    print(f"\n{YELLOW}Turnier spielen? [T]: ", end='')
    tournament = input()
    print(f"\n{RED}Turnier spielen? [T]: ", end='')
    tournament2 = input()
    

    我的颜色版本colorama==0.3.9

    Colorama docs 声明当使用autoreset=true 时,它会在print 命令之后立即重置您的颜色和样式选项,这发生在您输入命令之前,这就是您无法在用户输入的文本。

    【讨论】:

    • 哇,非常感谢这个迟到但黄金的答案!我从来没有怀疑它是由自动重置引起的......看起来我必须在每一行之后{CLEAR},然后我可以完全省略autoreset=True,最后得到我的彩色输入:-)!
    • @Cut7er 您甚至可能受益于创建自己的打印功能,而不是将{CLEAR} 添加到每一行print(f"\n{YELLOW}Turnier spielen? [T]: ", end=''),您可以将所需的字符串和颜色作为参数传递并在其中包含打印语句函数本身。这就是我个人的做法
    • 绝对是一个值得研究的想法!非常感谢你:-)
    【解决方案2】:

    https://docs.python.org/3/library/functions.html#input

    您可以在用户实际输入之前传递input()一个字符串来显示。

    from colorama import init
    init(autoreset=True)
    YELLOW = "\x1b[1;33;40m"
    RED = "\x1b[1;31;40m"
    
    print(f"\n{YELLOW}Turnier spielen? [T]: ", end='')
    tournament = input(RED)
    

    你可以用这个摆脱print(..., end='')的调用。

    【讨论】:

    • 这个特别的想法很快就浮现在脑海中,并在我关于 SO - stackoverflow.com/questions/52102240/… 的最后一个问题中得到了回答 - 但由于 print()input() 不使用相同的底层机制,它确实不行。因此,如果我将 {RED} 插入 input(f"{RED}"),它只会显示 ANSI 字符串,并且不会对输入的单词应用任何格式。
    • 关闭autoreset 并这样做:print(f"\n{YELLOW}Turnier spielen? [T]: {RED}", end='') 怎么样?
    • 抱歉,不工作 - 没有自动重置,没有任何颜色了。我基本上尝试了在文本之前、之后、内部打印、输入中放置 ANSI 序列的任何方法......需要有一些完全不同的东西,我错过了:|
    猜你喜欢
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 2016-02-25
    • 2016-04-16
    • 2011-04-20
    • 2017-04-19
    • 2015-08-23
    • 2017-07-23
    相关资源
    最近更新 更多