printing bold, colored, etc., text in ipython qtconsole printing bold, colored, etc., text in ipython qtconsole python python

printing bold, colored, etc., text in ipython qtconsole


In Jupyter Notebooks, one clean way of solving this problem is using markdown:

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

And then do something like:

printmd("**bold text**")

Of course, this is great for bold, italics, etc., but markdown itself does not implement color. However, you can place html in your markdown, and get something like this:

printmd("<span style='color:red'>Red text</span>")

You could also wrap this in the printmd function :

def printmd(string, color=None):    colorstr = "<span style='color:{}'>{}</span>".format(color, string)    display(Markdown(colorstr))

And then do cool things like

printmd("**bold and blue**", color="blue")

For the colors, you can use the hexadecimal notation too (eg. color = "#00FF00" for green)

To clarify, although we use markdown, this is a code cell: you can do things like:

for c in ('green', 'blue', 'red', 'yellow'):    printmd("Writing in {}".format(c), color=c)

Of course, a drawback of this method is the reliance on being within a Jupyter notebook.


Those are ANSI escapes, special sequences of characters which terminals process to switch font styles. The Qt console interprets some of them, but not all of the ones that serious terminals do. This sequence works to print in red, for instance:

print('\x1b[1;31m'+'Hello world'+'\x1b[0m')

However, if you're trying to write a cross platform application, be aware that the Windows command prompt doesn't handle these codes. Some of the more complex packages can process them to produce similar effects on Windows.

The Qt console can also display simple HTML, like this:

from IPython.display import HTMLHTML("<i>Italic text</i>")

But of course, HTML doesn't work in regular terminals.


I would like to complete the previous incomplete answer.Way more complex and fun things can be done without importing additional packages. e.g.

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

i.e.:

Open with:

'\x1b[XX;YY;ZZm'

Close with:

'\x1b[0m'

Where XX, YY and ZZ are numbers from:https://en.wikipedia.org/wiki/ANSI_escape_code

It should be noted that it is very much dependant on what you use as a console to see what works.

Working for me are combinations of the following:

Text styling

  • 1 Increased intensity (it operates on highlight and text simultaneously in my case)
  • 3 Itallic
  • 4 Underline

Text colors

  • 30 Black text
  • 31 Dark Red text
  • 32 Dark Green text
  • 33 Red text
  • 34 Dark blue text
  • 35 Purple text
  • 36 Blue text
  • 37 Gray text

Bright text colors

  • 1;30 Gray text (Bright black)
  • 1;31 Orange text (Bright red)
  • 1;32 Bright Green text
  • 1;33 Bright Yellow text
  • 1;34 Bright Blue text
  • 1;35 Bright Purple text
  • 1;36 Bright Cyan text
  • 1;37 White text (Brightgray)

Background colors (i.e. highlights)

  • 40 Black highlight
  • 41 Dark Red highlight
  • 42 Dark Green highlight
  • 43 Red highlight
  • 44 Dark blue highlight
  • 45 Purple highlight
  • 46 Blue highlight
  • 47 Gray highlight

Note that 1;42 etc. also works similarly

Tested on windows 7, python 3.6, IPython console, in spyder 3.2.3 this works for me