TypeError: GimpImageComboBox.set_active_image() argument 1 must be gimp.Image, not int

昨日のレイヤーを複製するスクリプトGIMP-Pythonで書いてみた。

#!/usr/bin/env python

from gimpfu import *

def python_duplicate_layer(img, layer):
  copy_layer = layer.copy()
  img.add_layer(copy_layer, -1)
  gimp.displays_flush()

register(
  "python-fu-duplicate-layer",
  "summary",
  "description",
  "name",
  "copyright",
  "date",
  "<Image>/Layer/Test/Duplicate Layer2",
  "RGB*",
  [],
  [],
  python_duplicate_layer)

main()

registerの第9引数はpython_duplicate_layerが受け取るパラメータをtupleで指定する*1が、run_mode、image、drawableはgimpfuモジュールが自動的に挿入するため指定してはいけない。例えば、前回のScript-Fuの書式に合わせて、

#...省略...
  "<Image>/Layer/Test/Duplicate Layer2",
  "RGB*",
  [
    (PF_IMAGE, "image", "IMAGE", 0),
    (PF_DRAWABLE, "drawable", "DRAWABLE", 0)
  ],
  [],
  python_duplicate_layer)
#...省略...

とすると、以下のようなエラーが出る。


$ []gimp[]
[]ここで適当な画像を読みこみ、メニューから「Duplicate Layer2」を実行[]
[]Traceback (most recent call last):[]
[] File "/usr/lib/gimp/2.0/python/gimpfu.py", line 767, in _run[]
[] res = _interact(proc_name, params[1:])[]
[] File "/usr/lib/gimp/2.0/python/gimpfu.py", line 688, in _interact[]
[] wid = _edit_mapping[pf_type](def_val)[]
[] File "/usr/lib/gimp/2.0/python/gimpui.py", line 133, in __init__[]
[] self.set_active_image(default)[]
[]TypeError: GimpImageComboBox.set_active_image() argument 1 must be gimp.Image, not int[]
完成したスクリプトは、「duplicate-layer.py」の名で実行許可を付けた上で(「~/.gimp-2.*/scripts」ではなく)「~/.gimp-2.*/plug-ins」に入れて使用する。

*1:書式はGIMP Python Documentにある通り、(type, name, description, default [, extra])とする