Ошибка выполнения 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 привели к отображению сообщения.

Другие вопросы по тегам