web-dev-qa-db-fra.com

impression en gras, en couleur, etc., texte dans ipython qtconsole

J'essaie d'obtenir du texte en gras, ou en couleurs, ou éventuellement en italique, dans qtconsole d'ipython.

J'ai trouvé ce lien: Comment imprimer du texte en gras en Python? , et utilisait les première et deuxième réponses, mais dans qtconsole, seule l'option de soulignement fonctionne.

J'essaie:

print '\033[1m' + 'Hello World!' + '\033[0m'

Et obtenir:

Hello World!

(Pas de gras). Les couleurs ne fonctionnent pas non plus. Mais:

print '\033[4m' + 'Hello World!' + '\033[0m'

Et obtenir:

Hello World!

Avec soulignement.

Ceci est seulement dans la qtconsole. En exécutant ipython juste dans le terminal, cela fonctionne pour faire des caractères gras et colorer de cette façon.

Il y avait d'autres options suggérées dans ce lien et une autre, Imprimer dans un terminal avec des couleurs utilisant Python? , lié à celui-ci, mais ils semblent tous plus complexes et utiliser des paquets plus élaborés que ce qui semble nécessaire pour ce que je veux faire, qui consiste simplement à faire afficher qtconsole comme le fait un terminal ordinaire.

Est-ce que quelqu'un sait ce qui se passe? Est-ce simplement une limitation de la qtconsole?

10
David Schueler

Dans Jupyter Notebooks, une solution simple pour résoudre ce problème consiste à utiliser le démarquage:

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

Et puis faites quelque chose comme:

printmd("**bold text**")

Bien sûr, cela convient très bien aux caractères gras, italiques, etc., mais le démarquage en soi ne met pas en œuvre la couleur. Cependant, vous pouvez placer du HTML dans votre démarque et obtenir quelque chose comme ceci:

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

Vous pouvez aussi envelopper ceci dans la fonction printmd:

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

Et puis faire des choses cool comme 

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

Pour les couleurs, vous pouvez également utiliser la notation hexadécimale (par exemple, color = "#00FF00" pour le vert)

Pour clarifier, bien que nous utilisions markdown, il s’agit d’un code cell: vous pouvez faire des choses comme:

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

Bien entendu, l’inconvénient de cette méthode réside dans le fait qu’il est nécessaire de faire partie d’un carnet Jupyter.

24
Charles

Ce sont des échappements ANSI, des séquences spéciales de caractères que les terminaux traitent pour changer de style de police. La console Qt en interprète certains, mais pas tous ceux que les terminaux sérieux font. Cette séquence permet d’imprimer en rouge, par exemple:

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

Toutefois, si vous essayez d'écrire une application multiplate-forme, sachez que l'invite de commande Windows ne gère pas ces codes. Certains des packages les plus complexes peuvent les traiter pour produire des effets similaires sur Windows.

La console Qt peut aussi afficher du HTML simple, comme ceci:

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

Mais bien sûr, HTML ne fonctionne pas dans les terminaux classiques.

11
Thomas K

Je voudrais compléter la réponse incomplète précédente… .. Des choses beaucoup plus complexes et amusantes peuvent être faites sans importer de paquets supplémentaires. par exemple.

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

c'est à dire.:

Ouvrir avec:

'\x1b[XX;YY;ZZm'

Fermer avec:

'\x1b[0m'

Où XX, YY et ZZ sont des nombres de: https://en.wikipedia.org/wiki/ANSI_escape_code

Il convient de noter que cela dépend beaucoup de ce que vous utilisez comme console pour voir ce qui fonctionne.

Travailler pour moi sont des combinaisons des éléments suivants:

Style du texte

  • 1 Intensité accrue (dans mon cas, cela fonctionne en surbrillance et texte)
  • 3 Itallic 
  • 4 souligné

Couleurs du texte

  • 30 texte noir 
  • 31 texte rouge foncé 
  • 32 texte vert foncé 
  • 33 texte rouge 
  • 34 Texte bleu foncé 
  • 35 texte violet 
  • 36 texte bleu 
  • 37 texte gris

Couleurs de texte vives

  • 1; 30 texte gris (noir brillant) 
  • 1; 31 Texte orange (rouge vif) 
  • 1; 32 texte vert clair 
  • 1; 33 texte jaune vif 
  • 1; 34 texte bleu vif 
  • 1; 35 texte violet clair 
  • 1; 36 texte cyan clair 
  • 1; 37 Texte en blanc (Bright Grey)

Couleurs de fond (c'est-à-dire surlignées)

  • 40 point culminant noir
  • 41 point culminant rouge foncé
  • 42 point culminant vert foncé
  • 43 point culminant rouge
  • 44 point culminant bleu foncé
  • 45 point culminant violet
  • 46 bleu en surbrillance
  • 47 point culminant gris

Notez que 1; 42 etc. fonctionne également de manière similaire

Testé sur Windows 7, Python 3.6, console IPython, dans Spyder 3.2.3 cela fonctionne pour moi

4
Jonasz

Si vous voulez parler du corps du texte du bloc-notes iPython (Markdowns), vous pouvez mettre 2 caractères de soulignement directement avant et après votre texte pour le rendreGRAS:

__BOLD TEXT__ => TEXTE GRAS

si vous mettez une barre oblique inverse avant cela, il sera contrebalancé:

\__BOLD TEXT__ => __BOLD TEXT__

1
Ali

Il y a peu d'autres façons de modifier (j'ai essayé dans iPython Notebook, je ne suis pas sûr des autres) ..

**BOLD TEXT**

Le texte ci-dessus apparaîtra en gras: TEXTE GRAS

*__BOLD TEXT__*

produira du texte en gras et en italique: TEXTE EN GRAS  

0