0

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

让它工作!正如我在代码中所写的那样,“你好”出现在文件下拉菜单下。问题是它没有显示带有我期待已久的消息的控制台框!

如果我转到 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)

4

2 回答 2

2

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

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

#!/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()

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

于 2018-03-23T10:43:52.703 回答
0

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

于 2018-03-23T05:58:33.643 回答