【问题标题】:Why newlines are not color-formatted?为什么换行符没有颜色格式?
【发布时间】:2023-03-05 17:09:01
【问题描述】:

我已遵循this 解决方案,以便在终端上对矩阵进行颜色格式化。但是,当我打印它时,我添加的用于分隔矩阵行的换行符没有被格式化。我希望整个终端变成背景白色和黑色文本(对于与矩阵高度对应的区域),但显然不是。为什么?

这是代码:

m = np.full((4,4),'0',dtype=np.str_)
print('\x1b[0;30;47m\n'+'\n\n'.join('   '+'   '.join(line) for line in m)+'\n\x1b[0m')

证明 我使用的是默认的 ubuntu 14.04 终端

已解决 最后,我只是将颜色格式应用于由新行分隔的每个字符串。

【问题讨论】:

  • 你能提供证据证明这显然没有按预期工作吗?
  • 我刚刚在我的控制台中尝试过,我可以确认它没有像他预期的那样工作。嗯,我说了之后又试了一次,效果很好……然后我又试了一次,还是不行。哎呀,这个评论没用。
  • 你用的是什么终端?
  • @ScottHunter 问题已更新

标签: python python-3.x colors terminal


【解决方案1】:

我认为这种行为的原因是大多数终端只对实际打印的字符应用背景颜色,但\n\n 会生成一行包含 no 字符(而不是一行空格)。至少我手头的所有终端都是这样做的。试试这个:

print('\x1b[0;30;47m\n' + '\n'.join([' '*i for i in range(10)]) + '\n\x1b[0m')

您可能会看到类似楼梯的图案:

【讨论】:

    【解决方案2】:

    单元格背景仅在屏幕更新时着色。当您的程序打印换行符时,它“仅”使光标位置向下移动(不更新单元格)。

    但是,如果您修改程序以打印更多行,即向下到屏幕底部,它会做一些不同的事情:

    • 光标不能再向下移动。
    • 屏幕“索引”(向上滚动一行),并且
    • 新暴露的线将被着色。

    这是因为终端从 xterm 和 Linux 控制台复制行为。实际上,当擦除屏幕的某些部分时,终端的几个特性结合起来形成了它的行为。

    进一步阅读:

    【讨论】:

      猜你喜欢
      • 2016-11-30
      • 1970-01-01
      • 1970-01-01
      • 2013-03-23
      • 1970-01-01
      • 2011-02-15
      • 2018-05-17
      • 2011-11-21
      相关资源
      最近更新 更多