2019年2月27日水曜日

GIMP Script-Py (6) ひとつのファイルにふたつ以上のものを

GIMP の Python でプログラムを ... 。
その試行錯誤の中で、発見?した事があります。
ひとつのファイルに、幾つかのプログラム(スクリプト)を収める事が可能だったのですね。
長短がありますので、それも書いて見ますか。


Python には、未だ、不慣れで、
Web 上のコンテンツを眺めながらのコーディングです。
その多くは、単独の、例として 分かり易い形で、語られます。
でも、複雑なものを見れば、当然、気の利いた書き方を発見出来たりしますね。

GIMP の Python に関しては、単なる Python と異なり、事例も少ないです。
以下は、書いたら出来ちゃった レベル の お話 です。

割と最初の頃から、
def で定義される関数を複数書く事はしていました。
でも、 複数のメニュー (GIMP で言う register 宣言) を持つもの は、
書いた事が無かったのです。

結果から書けば、可能! です。

以下に例を。

この例は、既に解消された、
GIMP 2.10.8 で Group Layer を選択した状態で起動された Python Script (Script-Py) がエラーを起こす、
その対策を考えていた時のものです。

最初に、普通のものをひとつ書き、
def plugin_main( と register( と ふたつのブロックを コピーペーストして、
必要箇所をリネームの上、関数を加えたり、記述を変えたりして行った訳です。
  ( 例: plugin_main を plugin_main2 に変更 )

この様に書けば、
ひとつのファイルに、幾つか複数の GIMP 登録済みスクリプト を収められます。
各々、独立して、メインメニューから選択実行が可能です。
勿論、
コードの途中に重大な不備があれば、問題の無い、正常稼働が可能な 登録宣言済みのものも、アウト!です。
コピーペースト以前に動いていた部分(問題の無い 元のもの)も無視されます。
そう、このファイルに書かれたものは一切表示されなくなります。
メインメニューに正常に表示される様に持って行って、其処から更に、詳細を詰めないといけませんね。

勘違いしないで欲しいのは、
GIMP での Python も、その都度、実行されます。
同じファイルに書いてあっても、実行のタイミングが変われば、其処で初期化される変数の値は何時でも同じです。
一部の値のみを渡せる訳では無いので、間違わないで下さい。
無論、 全ての引数を指定して呼び出す分には問題ありませんが。


メリットは、
其処に書いた関数(無登録)を複数の機能(登録宣言済みのもの)で利用し合える事でしょうか?。
複数のファイルでは、その都度書くか、モジュール化しなければいけませんから。

デメリットは、
書き間違えれば、全ての機能(登録宣言済みのもの)迄、動かなくなる可能性がある事です。
GIMP 起動時に、コードの検証フェーズがあって、それで弾かれれば全滅の憂き目に会います。
最初は、きっと、びっくりなさると思いますよ。



0 件のコメント:

コメントを投稿