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),以便在您编辑图层蒙版或通道时禁用菜单项。
我花了一段时间试图让 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),以便在您编辑图层蒙版或通道时禁用菜单项。