2017/04/21(金) [n年前の日記]
#1 [gimp][python] Python-Fuのregister関数でハマった
GIMP の Python-Fu について実験していたのだけど。Python-FuスクリプトをGIMPのメニューに登録する際に使う register関数の指定の仕方でハマったり。
巷のサンプルを参考にして打ったつもりが、実行すると「3つの引数が要求されてるのに1つしかきてねえぞ」と延々怒られて。
原因は…。Python-Fuのregister関数には2種類の書き方があって、どちらの書き方にするかでパラメータの記述の仕方も変わってくる、ということを忘れていたせいだった。
以下は、古い書き方。
以下は、新しい書き方。
古い書き方は、7つ目の引数で、メニューの登録位置を記述する。パラメータとして、画像(PF_IMAGE)、レイヤー(PF_DRAWABLE) を書かなくても、メイン処理をする関数が呼ばれた際に、自動でその2つが最初の引数として渡される。
新しい書き方は、一番最後に、メニューの登録位置を記述する。パラメータとして画像とレイヤーも含めておかないと、メイン処理をする関数に、画像、レイヤーが渡されない。
ていうかコレ、以前もハマって、メモしてた…。
_mieki256's diary - 画像を斜めにするGIMP-Pythonスクリプトを書いた
_mieki256's diary - GIMPのPython-fuについてメモ
古い書き方と新しい書き方がある、ということはかろうじて覚えてたけど、パラメータの記述も変わるということをすっかり忘れていた…。
ちなみに前回は以下の記事を読んで解決策が分かった模様。ありがたや。
_【Gimp】Pythonによるプラグイン開発 - プログラマーのメモ書き
巷のサンプルを参考にして打ったつもりが、実行すると「3つの引数が要求されてるのに1つしかきてねえぞ」と延々怒られて。
原因は…。Python-Fuのregister関数には2種類の書き方があって、どちらの書き方にするかでパラメータの記述の仕方も変わってくる、ということを忘れていたせいだった。
以下は、古い書き方。
from gimpfu import *
def my_example_plugin_main(timg, tdrawable, msg):
"""main func."""
gimp.message("Hello, World: " + msg)
register(
"python_fu_FUNCTION_NAME",
"Python-Fu example",
"help",
"Your name",
"Your name",
"2017/04/20",
"<Image>/Filters/Languages/Python-Fu/Python-Fu example...",
"RGB*", # Alternately use RGB, RGB*, GRAY*, INDEXED etc.
# params (type, name, description, default [, extra])
[
(PF_STRING, "msg", "Text string", 'Hello, world!')
],
# return vals
[],
my_example_plugin_main # function name
)
main()
以下は、新しい書き方。
from gimpfu import *
def my_example_plugin_main(timg, tdrawable, msg):
"""main func."""
gimp.message("Hello, World: " + msg)
register(
"python_fu_FUNCTION_NAME",
"Python-Fu example",
"help",
"Your name",
"Your name",
"2017/04/20",
"Python-Fu example...",
"RGB*", # Alternately use RGB, RGB*, GRAY*, INDEXED etc.
# params (type, name, description, default [, extra])
[
(PF_IMAGE, "timg", "Input image", None),
(PF_DRAWABLE, "tdrawable", "Input drawable", None),
(PF_STRING, "msg", "Text string", 'Hello, world!')
],
# return vals
[],
my_example_plugin_main, # function name
menu="<Image>/Filters/Languages/Python-Fu"
)
main()
古い書き方は、7つ目の引数で、メニューの登録位置を記述する。パラメータとして、画像(PF_IMAGE)、レイヤー(PF_DRAWABLE) を書かなくても、メイン処理をする関数が呼ばれた際に、自動でその2つが最初の引数として渡される。
新しい書き方は、一番最後に、メニューの登録位置を記述する。パラメータとして画像とレイヤーも含めておかないと、メイン処理をする関数に、画像、レイヤーが渡されない。
ていうかコレ、以前もハマって、メモしてた…。
_mieki256's diary - 画像を斜めにするGIMP-Pythonスクリプトを書いた
_mieki256's diary - GIMPのPython-fuについてメモ
古い書き方と新しい書き方がある、ということはかろうじて覚えてたけど、パラメータの記述も変わるということをすっかり忘れていた…。
ちなみに前回は以下の記事を読んで解決策が分かった模様。ありがたや。
_【Gimp】Pythonによるプラグイン開発 - プログラマーのメモ書き
[ ツッコむ ]
以上です。