我试图让文本在ipython的qtconsole中以粗体,颜色或斜体显示。
我找到了这个链接:How do I print bold text in Python?,并使用了第一个和第二个答案,但在qtconsole中,只有下划线选项有效。
我试试:
print '\033[1m' + 'Hello World!' + '\033[0m'
得到:
Hello World!
(没有粗体字)。颜色也不起作用。但是:
print '\033[4m' + 'Hello World!' + '\033[0m'
得到:
Hello World!
带下划线。
这只是在qtconsole中。在终端中运行ipython,它可以用这种方式做粗体和颜色。
该链接中还有其他选项,Print in terminal with colors using Python?与其相关联,但是它们看起来都比较复杂,并且使用了更复杂的包,而不是我想做的事情,这是只需让qtconsole像普通终端一样显示。
有谁知道发生了什么?这只是qtconsole的限制吗?
答案 0 :(得分:31)
在Jupyter笔记本中,解决此问题的一种简洁方法是使用markdown:
from IPython.display import Markdown, display
def printmd(string):
display(Markdown(string))
然后执行以下操作:
printmd("**bold text**")
当然,这对于粗体,斜体等很有用,但降价本身并不实现颜色。但是,你可以在你的降价中放置html,并获得如下内容:
printmd("<span style='color:red'>Red text</span>")
你也可以将它包装在printmd
函数中:
def printmd(string, color=None):
colorstr = "<span style='color:{}'>{}</span>".format(color, string)
display(Markdown(colorstr))
然后做一些很酷的事情,比如
printmd("**bold and blue**", color="blue")
对于颜色,您也可以使用十六进制表示法(例如。color = "#00FF00"
表示绿色)
为了澄清,尽管我们使用markdown,但这是一个代码单元格:您可以执行以下操作:
for c in ('green', 'blue', 'red', 'yellow'):
printmd("Writing in {}".format(c), color=c)
当然,这种方法的缺点是依赖于Jupyter笔记本。
答案 1 :(得分:14)
这些是ANSI转义符,终端处理切换字体样式的特殊字符序列。 Qt控制台解释其中的一些,但不是所有严重终端都能解释的。此序列用于以红色打印,例如:
print('\x1b[1;31m'+'Hello world'+'\x1b[0m')
但是,如果您正在尝试编写跨平台应用程序,请注意Windows命令提示符不处理这些代码。一些更复杂的包可以处理它们以在Windows上产生类似的效果。
Qt控制台还可以显示简单的HTML,如下所示:
from IPython.display import HTML
HTML("<i>Italic text</i>")
但当然,HTML不适用于常规终端。
答案 2 :(得分:6)
我想完成之前的不完整答案。 如果不导入其他软件包,可以完成更复杂,更有趣的事情。 e.g。
print('\x1b[1;03;31;46m'+'Hello'+ '\x1b[0;4;30;42m' + ' world' '\x1b[0m')
即:
打开方式:
'\x1b[XX;YY;ZZm'
关闭:
'\x1b[0m'
XX,YY和ZZ是来自的数字: https://en.wikipedia.org/wiki/ANSI_escape_code
应该注意的是,它非常依赖于您作为控制台使用的内容来查看哪些有效。
为我工作是以下各项的组合:
文字样式
文字颜色
明亮的文字颜色
背景颜色(即高光)
注意1; 42等也可以类似地工作
在Windows 7,python 3.6,IPython控制台上测试,在spyder 3.2.3中这对我有用
答案 3 :(得分:0)
你可以调整几种方法(我在iPython笔记本中试过,不确定其他方法)..
**BOLD TEXT**
上面会生成粗体文字: BOLD TEXT
*__BOLD TEXT__*
将生成粗体和斜体文字: BOLD TEXT