2018年12月20日木曜日

GIMP Script-Py (4) Python らしく UI を

Script-Fu の頃、メッセージを出すのには苦労しました。
エラー と出るので、 心臓に悪い! のです。
でも、 Python なら。
はい。 独自 UI も楽々熟します!。


以下の内容は GIMP 2.10.x 限定です。 2.99 や 来る 3.0 では エラー になる筈。

幾ら、Python が 独自 UI も熟すとは言え、皆、それで書く 馬鹿 はいないでしょう。
ちゃんと、熟慮の上、用意されているからです。

普通、GIMP での スクリプトは、作業工程の自動化で用いられます。
ですから、 例外処理や作業途中の判断をユーザーに委ねる事は想定されていないのでしょう。
そうならない様に書く! のが、スクリプトの基本なのかも知れません。

しかし、単に、結果を表示したいのに、
エラー ! と脅されては、心臓に良くありません。

所謂、普通のメッセージボックスが欲しい処です。
また、このメッセージは、 Console から実行すると、メイン画面下欄に書き出されます。
そして、程無くして、消えてしまいます。

でも。
でも、 Python なら UI が作れます!。
この恩恵に与らない手はありません。

標準のメッセージとは別に、メッセージ表示させて見ましょうか!。

そもそも、事の発端は、メッセージ表示をしたいが、
扱う画像によって、或いは、選択項目によっては、
スクリプトから数多くのエラーが表示されるケースがあったのです。
エラーと言っても、実行に影響が及ばない、警告の類なのです。
 (無論、通常はエラーゼロのケースが多い筈ですが。)
そして、このエラー表示は、どんどん、積み重なって行くのです。 
この場合、エラー項目数が多過ぎて、それに続く、本来のメッセージ表示が隠されるのが問題でした。

そこで、考え及んだのが、UI として、別個のメッセージを表示させる事です。

これならば、エラーで溢れても、表示したいメッセージが隠される事はありません。

単なるメッセージですから、ユーザーに選択をして貰う必要は無く、
復帰する為のボタンがひとつあって、内容を文字列で表示するだけ、のものです。



では、 本丸!。


Python のコード部分はこうです。  定義部分のみ。
                  素人コードですので、不具合が潜む可能性あり。

import gtk

# gtk MessageBox As Warning
def gtk_msg_warning(msg_title, msg_strings, msg_strings_2):
    message = gtk.MessageDialog(None,
                                flags = gtk.DIALOG_DESTROY_WITH_PARENT,
                                type = gtk.MESSAGE_WARNING,
                                buttons = gtk.BUTTONS_OK)
    message.set_title(msg_title)
    message.set_markup(msg_strings)
    message.format_secondary_text(msg_strings_2)
    result = message.run()
    message.destroy()
    return result

# usage (after setting values)
# msg_title = "msg title - gtk"
# msg_strings = "first"
# msg_strings2 = "second"
# gtk_msg_warning(msg_title, msg_strings, msg_strings2)

これを実際のスクリプトに組み込むと、(要.編集 要.呼び出し)、
メッセージボックス が表示され、スクリプトの実行は其処で保留されます。
メッセージボックス が閉じられて、初めて、次の処理に進む形になります。


勿論、もっと、高等高度な事も可能な筈です。
作業分岐の為に、戻り値を活用する手もありますし。


まぁ、 簡単な UI 作成の 第一歩 と言う事で。

上記の内容は GIMP 2.10.x 限定です。 2.99 や 来る 3.0 では エラー になる筈。



[2021/07/20] Code 訂正 gtk_msg_warning( ... , msg_strings_2) > gtk_msg_warning( ... , msg_strings2)
[2021/07/20] GIMP 2.10.x 限定の旨を追記

0 件のコメント:

コメントを投稿