2014-04-24 17 views
5

Sto cercando di visualizzare il testo in grassetto, a colori, o forse in corsivo, in qtconsole di ipython.stampa in grassetto, colorato, ecc., Testo in ipython qtconsole

Ho trovato questo collegamento: How do I print bold text in Python? e ho usato la prima e la seconda risposta, ma in qtconsole, funziona solo l'opzione di sottolineatura.

cerco:

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

E ottenere:

Hello World!

(No grassetto). I colori non funzionano neanche. Ma:

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

E ottenere:

Hello World!

Con la sottolineatura.

Questo è solo nella qtconsole. Eseguendo ipython solo nel terminale, funziona in questo modo per rendere grassetto e colorato.

C'erano altre opzioni suggerite in quel collegamento e un altro, Print in terminal with colors using Python?, collegato da esso, ma sembrano tutte più complesse, e usare pacchetti più elaborati, di quanto sembra necessario per quello che voglio fare, che è semplicemente quello di ottenere qtconsole da visualizzare come fa il normale terminale.

Qualcuno sa cosa sta succedendo? È semplicemente una limitazione della qtconsole?

risposta

6

Questi sono escape ANSI, sequenze speciali di caratteri che i terminali elaborano per cambiare lo stile dei caratteri. La console Qt ne interpreta alcuni, ma non tutti quelli che fanno i terminali seri. Questa sequenza funziona per stampare in rosso, per esempio:

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

Tuttavia, se si sta cercando di scrivere un'applicazione multipiattaforma, essere consapevoli del fatto che il prompt dei comandi di Windows non gestisce questi codici. Alcuni dei pacchetti più complessi possono elaborarli per produrre effetti simili su Windows.

La console Qt può anche visualizzare semplice HTML, in questo modo:

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

Ma, naturalmente, HTML non funziona nei terminali regolari.

1

Se si intende il testo del corpo del notebook ipython (Ribassi), si può mettere 2 caratteri di sottolineatura direttamente prima e dopo il testo per renderlo BOLD:

__BOLD TEXT__ =>Grassetto

se si mette una barra rovesciata prima che, verrà contrastato:

\__BOLD TEXT__ => __BOLD TEXT__

+0

Richiede cellule Markdown. La domanda riguardava l'utilizzo delle celle di codice. – Charles

0

Poche più modi quali si può giocare in giro (ho provato a ipython notebook, non è sicuro su altri) ..

**BOLD TEXT** 

Sopra produrrà il testo in grassetto: BOLD TESTO

*__BOLD TEXT__* 

produrrà audace e corsivo: tESTO BOLD

+2

Funziona solo nella cella di markdown. Non riesci a farlo funzionare per stampa ('** Testo **') –

4

In Jupyter notebook, un modo pulito per risolvere questo problema è usin g Markdown:

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

e poi fare qualcosa di simile:

printmd("**bold text**") 

Naturalmente, questo è grande per il grassetto, il corsivo, ecc, ma mark-down per sé non implementa il colore. Tuttavia, è possibile inserire HTML nel Markdown, e ottenere qualcosa di simile:

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

Si potrebbe anche avvolgere questo nella funzione printmd:

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

e poi fare cose interessanti come

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

Per i colori, è possibile utilizzare anche la notazione esadecimale (ad esempio color = "#00FF00" per il verde)

Per chiarire, anche se usiamo Markdown, si tratta di un codice di cella: si possono fare cose come:

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

Naturalmente, un inconveniente di questo metodo è la dipendenza da essere all'interno di un notebook Jupyter.

0

Vorrei completare la precedente risposta incompleta. Modo più complesso e divertente può essere fatto senza importare pacchetti aggiuntivi. per esempio.

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

, ad es.:

Apri con:

'\x1b[XX;YY;ZZm' 

Chiudere con:

'\x1b[0m' 

Dove XX, YY e ZZ sono numeri da: https://en.wikipedia.org/wiki/ANSI_escape_code

Va notato che è molto dipende da ciò che usi come console per vedere cosa funziona.

Lavorare per me sono combinazioni di quanto segue:

Testo styling

  • 1 maggiore intensità (che opera su evidenziare e testo simultaneamente nel mio caso)
  • 3 Itallic
  • 4 Sottolinea

i colori del testo

  • 30 Testo nero testo
  • 31 Dark Red
  • 32 Dark Green testo
  • 33 Red testo
  • 34 scuro testo blu
  • 35 testo Viola
  • 36 testo blu
  • 37 testo grigio

Colori vivaci testo

  • 1; 30 Testo grigio (nero brillante)
  • 1; 31 Arancione testo (rosso brillante)
  • 1; 32 Luminoso testo verde
  • 1 ; 33 Testo giallo acceso
  • 1; 34 Testo blu chiaro
  • 1; 35 Testo viola chiaro
  • 1; 36 vivida ciano testo
  • 1; 37 Testo bianco (luminoso grigio)

colori di sfondo (cioèmette in evidenza)

  • 40 Nero evidenziare
  • 41 Dark Red evidenziare
  • 42 Dark Green evidenziare
  • 43 clou Red
  • 44 blu scuro clou
  • 45 clou Viola
  • 46 Blu evidenziare
  • 47 Evidenziazione grigio

Si noti che 1; 42 ecc funziona anche in modo simile

testato su Windows 7, Python 3.6, console IPython, in spyder 3.2.3 questo funziona per me

Problemi correlati