41

我试图让文本在 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 的限制吗?

4

5 回答 5

81

在 Jupyter Notebooks 中,解决此问题的一种干净方法是使用降价:

from IPython.display import Markdown, display
def printmd(string):
    display(Markdown(string))

然后执行以下操作:

printmd("**bold text**")

当然,这对于粗体、斜体等非常有用,但是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 笔记本。

于 2017-10-25T13:48:22.773 回答
24

这些是 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 在常规终端中不起作用。

于 2014-04-24T16:50:26.010 回答
22

我想完成之前不完整的答案。无需导入额外的包就可以完成更复杂和有趣的事情。例如

print('\x1b[1;03;31;46m'+'Hello'+ '\x1b[0;4;30;42m' + ' world' '\x1b[0m')

IE:

打开用:

'\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 上测试这对我有用

于 2017-11-13T17:57:25.710 回答
-3

如果您指的是 iPython 笔记本(Markdowns)的正文,您可以在文本之前和之后直接放置 2 个下划线字符以使其变为粗体

__BOLD TEXT__ => 粗体字

如果您在此之前加上反斜杠,它将被抵消:

\__BOLD TEXT__=> __粗体字__

于 2015-11-23T11:04:46.590 回答
-3

您可以调整的更多方法(我在 iPython Notebook 中尝试过,不确定其他)..

**BOLD TEXT**

上面将产生粗体文本: BOLD TEXT

*__BOLD TEXT__*

将产生粗体和斜体文本: BOLD TEXT

于 2016-04-02T13:54:20.610 回答