【问题标题】:printing bold, colored, etc., text in ipython qtconsole在 ipython qtconsole 中打印粗体、彩色等文本
【发布时间】:2014-04-24 14:18:12
【问题描述】:

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

【问题讨论】:

    标签: python jupyter-notebook ipython jupyter-lab qtconsole


    【解决方案1】:

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

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

    然后执行以下操作:

    printmd("**bold text**")
    

    当然,这对于粗体、斜体等非常有用,但是markdown本身并没有实现颜色。但是,您可以将 html 放在您的 markdown 中,并获得如下内容:

    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 在 Jupyter / IPython 5.7.8 和 Python 3.7(在 firefox 和 Ubunutu 下使用)有帮助的答案之一!
    • 非常适合在 Jupyter 笔记本中标记结果,当函数中有多个相似的结果时。
    【解决方案2】:

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

    【讨论】:

    • 我发现这个link 有更多颜色和突出显示
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      __BOLD TEXT__ => 粗体字

      如果你在前面加上反斜杠,它会被抵消:

      \__BOLD TEXT__ => __BOLD TEXT__

      【讨论】:

      • 需要降价单元格。问题是关于使用代码单元的。
      【解决方案5】:

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

      **BOLD TEXT**
      

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

      *__BOLD TEXT__*
      

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

      【讨论】:

      • 它只适用于markdown单元格。你不能通过 print('Text') 让它工作
      猜你喜欢
      • 2019-05-31
      • 2012-03-20
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 2019-09-25
      • 1970-01-01
      • 2013-12-29
      • 1970-01-01
      相关资源
      最近更新 更多