在ipython qtconsole中打印加粗、彩色等文本

44 投票
5 回答
88744 浏览
提问于 2025-04-18 04:06

我想在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 个回答

-3

这里有几种你可以尝试的方法(我是在iPython Notebook里试的,不确定其他地方是否适用)..

**BOLD TEXT**

上面的代码会显示粗体字:BOLD TEXT

*__BOLD TEXT__*

这个代码会显示粗体和斜体字:BOLD TEXT

-3

如果你指的是iPython笔记本里的正文内容(也就是Markdown格式),你可以在你的文字前后各加两个下划线,就能把文字变成加粗

__加粗文字__ => 加粗文字

如果你在前面加一个反斜杠,这样就会失效,文字不会变成加粗:

\__加粗文字__ => __加粗文字__

26

我想补充一下之前未完成的回答。其实可以做很多更复杂和有趣的事情,而不需要导入额外的包。例如:

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 上测试过,这些对我来说都有效。

27

这些是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在普通终端中是无法使用的。

104

在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中使用。

撰写回答