2017-07-19 41 views
0

我跟着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') 

PROOFenter image description here 我使用的默认的ubuntu 14.04终端

解决 最后,我简单地应用于彩色格式到每个字符串由一个新行分隔。

+0

你能提供的证据表明,这显然是不正常工作? –

+0

我只是在我的控制台中试过了,我可以确认它并不像他预期的那样工作。呃,我刚刚说过之后再次尝试,并且它工作正常....然后我再次尝试,它不再工作。 Jeez,这个评论是无用的。 –

+0

你在用什么终端? – MattR

回答

1

我认为这种现象的原因是,大多数终端仅适用背景色被实际打印的字符,但\n\n产生含没有字符线(而不是一条线满的空间)。至少这就是我手头上的所有终端所做的。试试这个:

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

,你可能会看到一个阶梯状的图案:只在屏幕更新stair-like pattern

1

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

不过,如果您修改程序打印更多的线,即下降到屏幕的底部,它会做不同的事情:

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

这是因为终端从xterm和Linux控制台复制行为。实际上,终端的几个功能在擦除屏幕部分时组合起来以形成其行为。

延伸阅读: