在ipython qtconsole中打印加粗、彩色等文本
我想在ipython的qtconsole中让文本显示为粗体、彩色或者斜体。
我找到这个链接:如何在Python中打印粗体文本?,并使用了前两个答案,但在qtconsole中,只有下划线这个选项有效。
我尝试了:
print '\033[1m' + 'Hello World!' + '\033[0m'
结果是:
Hello World!
(没有粗体)。颜色也不管用。但是:
print '\033[4m' + 'Hello World!' + '\033[0m'
结果是:
Hello World!
有下划线。
这只在qtconsole中有效。在终端中运行ipython时,使用这种方式可以实现粗体和颜色。
在那个链接和另一个链接中,还有其他选项被建议,如何在终端中使用Python打印彩色文本?,但它们似乎都比较复杂,需要使用更复杂的包,而我只想让qtconsole像普通终端那样显示。
有没有人知道这是怎么回事?这是qtconsole的限制吗?
5 个回答
这里有几种你可以尝试的方法(我是在iPython Notebook里试的,不确定其他地方是否适用)..
**BOLD TEXT**
上面的代码会显示粗体字:BOLD TEXT
*__BOLD TEXT__*
这个代码会显示粗体和斜体字:BOLD TEXT
如果你指的是iPython笔记本里的正文内容(也就是Markdown格式),你可以在你的文字前后各加两个下划线,就能把文字变成加粗:
__加粗文字__
=> 加粗文字
如果你在前面加一个反斜杠,这样就会失效,文字不会变成加粗:
\__加粗文字__
=> __加粗文字__
我想补充一下之前未完成的回答。其实可以做很多更复杂和有趣的事情,而不需要导入额外的包。例如:
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 增强亮度(在我这里,它同时作用于高亮和文本)
- 3 斜体
- 4 下划线
文本颜色
- 30 黑色文本
- 31 深红色文本
- 32 深绿色文本
- 33 红色文本
- 34 深蓝色文本
- 35 紫色文本
- 36 蓝色文本
- 37 灰色文本
亮色文本
- 1;30 灰色文本(亮黑色)
- 1;31 橙色文本(亮红色)
- 1;32 亮绿色文本
- 1;33 亮黄色文本
- 1;34 亮蓝色文本
- 1;35 亮紫色文本
- 1;36 亮青色文本
- 1;37 白色文本(亮灰色)
背景颜色(即高亮)
- 40 黑色高亮
- 41 深红色高亮
- 42 深绿色高亮
- 43 红色高亮
- 44 深蓝色高亮
- 45 紫色高亮
- 46 蓝色高亮
- 47 灰色高亮
注意,像 1;42 这样的组合也可以类似使用。
我在 Windows 7、Python 3.6、IPython 控制台和 Spyder 3.2.3 上测试过,这些对我来说都有效。
这些是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在普通终端中是无法使用的。
在Jupyter Notebook中,有一种简单的方法来解决这个问题,就是使用markdown:
from IPython.display import Markdown, display
def printmd(string):
display(Markdown(string))
然后可以做一些类似这样的事情:
printmd("**bold text**")
当然,这样做可以让文字变得粗体、斜体等等,但markdown本身并不支持颜色。不过,你可以在markdown中插入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 Notebook中使用。