Ошибка выполнения gimp python
Я потратил некоторое время, пытаясь заставить GIMP зарегистрировать пример классического плагина "hello world", который я написал, чтобы начать изучение. Наконец, я получил его для регистрации после двойной проверки местоположения файла и пути для плагинов в настройках GIMP, а также изменения прав пользователя для выполнения.py в терминале с использованием chmod.
Получил это на работу! "Привет" появляется в раскрывающемся меню "Файл", как я написал в коде. Проблема в том, что он не отображает окно консоли с моим долгожданным сообщением!
Если я захожу в консоль python-fu в GIMP, я могу найти свой плагин в 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)
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 не открыто изображение. "Drawables" - это слои, маски слоев и каналы (сохраненные выделения и т. Д.), Поэтому '*'
подразумевает, что вы можете обрабатывать однобитные / канальные элементы. Если не так, используйте 'RGB*'
что говорит Gimp, что вы поддерживаете только элементы RGB (с альфа-каналом или без него), поэтому этот пункт меню отключается, когда вы редактируете маску слоя или канал.
Так как плагин ничего не делает с входными данными, похоже, что проблема заключалась в использовании аргументов "изображение" и "рисуемый". Удаление их и оставление его как hello_world() и перезагрузка GIMP привели к отображению сообщения.