省型旧形国電の残影を求めて

戦前型旧形国電および鉄道と変褪色フィルム写真を中心とした写真補正編集の話題を扱います。他のサイトでは得られない、筆者独自開発の写真補正ツールや補正技法についても情報提供しています。写真補正技法への質問はコメント欄へどうぞ

GIMP3 / Python プログラミング試行錯誤日誌: 改行コード \n が効かない

 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 におき変えることで、メタデータとして動作させることができるのではないかと考えました。

 するとビンゴでした。上手く動作させることが出来ました。よく考えれば当たり前のことですが、しばらく迷ったので備忘録としてここにメモします。