GIMP プラグインの UI プログラミングを行なっていて、ダイアログ上のラベルで、途中で改行折り返し表示をさせようと思いました。この場合通常は以下のように行います。
strings = "message \n displayed."
label = Gtk.Label(label=strings)
上の場合、あらかじめ strings という変数に表示したいメッセージを入れて、それをGtk.Label を作る際に、読み込んで表示させます。その際、メッセージに \n を入れるとその部分で改行されます(このバックスラッシュは環境によって ¥ に見える場合があります)。あるいは変数を媒介させず、直接 label="message \n displayed." としても構いません。
ところが、ファイルからテキストデータを読み込んで、この strings に保存し、それを label に渡すと、うまく改行されません。この \n が改行のメタデータとして作動せず、そのまま " \n " と表示されてしまいます。コード上で指定すれば上手くいくのに、なぜかファイルから読み込むとダメです。
しばらくファイルから読み込んだデータでも、うまく改行コードとして機能しないか四苦八苦した挙句、結局以下のように解決しました。
label = Gtk.Label(label=strings.replace("\\n","\n"))
つまり、ファイルからテキストデータとして読み込んだときに、 \n が改行のメタデータとして作動しない理由は、ファイルから読み込んだときに、自動的に、\\n と変換され、メタデータが無効化されて、そのまま表示されてしまうためではないかと推測しました。そこで、replace メソッドを使って \\n を \n におき変えることで、メタデータとして動作させることができるのではないかと考えました。
するとビンゴでした。上手く動作させることが出来ました。よく考えれば当たり前のことですが、しばらく迷ったので備忘録としてここにメモします。