ошибка выполнения 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)


person Nap D. Lover    schedule 23.03.2018    source источник
comment
Собираюсь удалить это, я думаю, я просто удалил изображение аргументов и возможность рисования, и теперь он работает и отображает сообщение. Но, возможно, это будет полезно для некоторых других новичков...   -  person Nap D. Lover    schedule 23.03.2018
comment
Ответьте сами ниже!   -  person Ubdus Samad    schedule 23.03.2018


Ответы (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 (с альфа-каналом или без него), чтобы этот пункт меню был отключен, когда вы редактируете маску слоя или канал.

person xenoid    schedule 23.03.2018
comment
Я рад, что оставил ответ открытым — приятно видеть, что мои интуитивные предположения о списке аргументов и списке параметров должны быть подробно объяснены! Благодарю вас! - person Nap D. Lover; 23.03.2018

Поскольку плагин ничего не делает с входными данными, проблема заключается в аргументах «image» и «drawable». Удаление их и оставление его как hello_world() и перезагрузка GIMP привели к отображению сообщения.

person Nap D. Lover    schedule 23.03.2018