web-dev-qa-db-ja.com

ipython qtconsoleでの太字、色付きなどのテキストの印刷

Ipythonのqtconsoleでテキストを太字、色、またはイタリック体で表示しようとしています。

このリンクを見つけました: Pythonで太字のテキストを印刷するにはどうすればよいですか? 、最初と2番目の回答を使用しましたが、qtconsoleでは、下線オプションのみが機能します。

私が試します:

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

そして取得:

Hello World!

(太字なし)。色も機能しません。だが:

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

そして取得:

Hello World!

下線付き。

これはqtconsoleのみにあります。ターミナルでipythonを実行するだけで、この方法で太字と色を実行できます。

そのリンクと別のオプションで提案された他のオプションがありました Pythonを使用して色付きの端末で印刷します 、それからリンクされていますが、それらはすべてより複雑に見え、より複雑なパッケージを使用し、私がやりたいのは、通常の端末のようにqtconsoleを表示するだけです。

誰が何が起こっているか知っていますか?これは単にqtconsoleの制限ですか?

15
David Schueler

Jupyterノートブックでは、この問題を解決する1つのクリーンな方法は、マークダウンを使用することです。

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

そして、次のようなことをします:

printmd("**bold text**")

もちろん、これは太字、斜体などには適していますが、マークダウン自体は色を実装しません。ただし、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")

色には、16進表記も使用できます(例:color = "#00FF00"は緑)

明確にするために、マークダウンを使用しますが、これはcodeセル​​です。次のようなことができます。

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

もちろん、この方法の欠点は、Jupyterノートブック内にあることに依存していることです。

35
Charles

これらは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は通常の端末では機能しません。

16
Thomas K

以前の不完全な回答を完了したいと思います。追加のパッケージをインポートすることなく、より複雑で楽しいことができます。例えば.

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コンソール、スパイダー3.2.3でこれは私のために働く

7
Jonasz

IPythonノートブックの本文テキスト(Markdowns)を意味する場合は、テキストの前後に2つの下線文字を挿入して、テキストを作成できます[〜#〜] bold [〜#〜]

__BOLD TEXT__ => 太字

その前にバックスラッシュを置くと、それは打ち消されます:

\__BOLD TEXT__ => __BOLD TEXT__

1
Ali

微調整する方法は他にもいくつかあります(iPython Notebookで試しましたが、他の方法についてはわかりません)。

**BOLD TEXT**

上記は太字のテキストを生成します:BOLD TEXT

*__BOLD TEXT__*

太字および斜体のテキストを生成します:BOLD TEXT

0