gimp python 执行错误

gimp python execution error

我花了一段时间试图让 GIMP 注册一个我编写的经典 "hello world" 插件的示例以开始学习。最后,在仔细检查 GIMP 首选项中的文件位置和插件路径以及使用 chmod 更改用户在终端中执行 .py 的权限后,我注册了它。

成功了! "hello" 出现在文件下拉菜单下,正如我在代码中所写的那样。问题是它没有显示带有我期待已久的消息的控制台框!

如果我转到 GIMP 中的 python-fu 控制台,我可以在 PDB 中找到我的插件,当我单击应用并从控制台 运行 时,我收到一个执行错误,

Traceback (most recent call last):
  File "<input>", line 1, in <module>
RuntimeError: execution error

我希望我的代码是正确的,我的大问题只是注册,但现在我的希望破灭了!我的代码有什么问题吗:

#!/usr/bin/env python

from gimpfu import *

def hello_world(image, drawable):
    pdb.gimp_message("Hello World")

register("python-fu-hello-world", "hello", "helloooo", "X. D.", "X. D.", "2018", "Hello", "", [], [], hello_world, menu="<Image>/File")

main()

(Macbook OS 10.11,python 2.7,GIMP 2.8)

由于插件没有对输入做任何事情,所以问题似乎是参数“image”和“drawable”。删除它们并将其保留为 hello_world() 并重新启动 GIMP 导致显示消息。

问题是 python 函数的参数列表(def hello_world(image, drawable) 必须与 register() 调用的参数中的参数声明相匹配。

注册码中的第一个 [] 是一个空列表,它告诉 Gimp python 函数不带参数。在典型情况下,您需要这些参数(因为它们告诉您脚本应该在哪个 layer/channel 上 运行),因此您可以:

#!/usr/bin/env python

from gimpfu import *

def hello_world(image, drawable):
    pdb.gimp_message("Hello World")

register("python-fu-hello-world", "hello", "helloooo", "X. D.", "X. D.", "2018", "Hello", 
        "", # Type of drawable on which the script runs 
        [
            (PF_IMAGE, 'image', 'Input image', None),
            (PF_DRAWABLE, 'drawable', 'Input drawable', None),
        ], 
        [], # this one is used if you return results 
        hello_world, menu="<Image>/Test")

main()

绘图类型很重要。如果将其留空 (''),则可以在没有 image/layer 的情况下调用脚本,这种情况很少见。如果你将它设置为 '*' 那么脚本可以在任何可绘制对象上 运行,但是如果没有在 Gimp 中打开图像,菜单将会变灰。 "Drawables" 是图层、图层蒙版和通道(保存的选择等),因此 '*' 意味着您可以处理 one-bit/channel 项。如果不是这样,请使用 'RGB*' 告诉 Gimp 您只支持 RGB 项(带或不带 alpha),以便在您编辑图层蒙版或通道时禁用菜单项。