Python-Fu скрипт не инициализируется

Главная Форумы Разработка Разработка сценариев Python-Fu скрипт не инициализируется

В этой теме 6 ответов, 3 участника, последнее обновление  zend 5 года/лет, 8 мес. назад.

Просмотр 7 сообщений - с 1 по 7 (из 7 всего)
  • Автор
    Сообщения
  • #883

    spoilt_exile
    Участник

    Начал понемногу пописывать на Python для GIMP и тут же столкнулся с вагоном непоняток и проблем. Одна из самых главных состоит в том, что GIMP в упор не хочет запускать мои самописные костыли. Выходит такая примерно картина при запуске GIMP’а:


    Querying plug-in: '/home/spoilt/.gimp-2.6/plug-ins/rex_test1.py'

    (gimp:7874): LibGimpBase-WARNING **: gimp: gimp_wire_read(): error
    Terminating plug-in: '/home/spoilt/.gimp-2.6/plug-ins/rex_test1.py'

    И это с ключом —verbose! Вся соль ситуации в том, что другие Python-скрипты нормально загружаются и функционируют. Переименовывания файла, смена заголовка и прочее не работают. В чем проблема?
    P.S. Проблемный код прилагается.

    #1558

    Naked_and_Dead
    Участник
    #1573

    zend
    Участник

    А какого мне было ууу… Я вообще вспоминать боюсь. Я ведь под виндой писал (своего компьютера нет и выбирать операционную систем не приходится), а под виндой GIMP такой молчаливый, из под консоли его не запустить, вывод не посмотреть, да ещё и эти отступы пэйтоновские: не соблюдаешь отступы и даже правильный скрипт не запуститься… Думал даже отказаться, но количество плюсов перед «Scheme» перевесило чашу весов, а потом я освоился и понял, что сделал правильный выбор.

    Чтобы использовать «gimpplugin Module» для написания дополнения, а не писать аля «Scheme» скрипты постоянно дёргая PDB придётся привыкнуть к ряду нюансов, но оно того стоит :-)

    Вот это работает:


    #!/usr/bin/env python
    # -*- coding: utf-8 -*-

    from gimpfu import *
    import gimp
    import pdb
    import gimpplugin


    class test_rex( object ):
    def __init__( self, runmode, image, drawable ):
    gimp.context_push()
    # Запрещаем запись информации UNDO
    image.undo_group_start()
    # Увеличиваем размер холста
    image.resize(image.width + 2, image.height + 2, 1, 1)
    # Запоминаем цвет фона
    old_background = gimp.get_background()
    # Меняем цвет фона
    gimp.set_background(125, 125, 125)
    # Сводим изображение.
    # После сведения идентификатор слоя drawable меняется, поэтому
    # присваиваем переменной self.drawable результат который возвращает image.flatten()
    # иначе в дальнеёшем можем словить ошибку "идентификатор drawable некорректен скорее всего вы пытаетесь
    # работать со слоем, которого не существует"
    self.drawable = image.flatten()
    # Возвращаем в исходное состояние цвет фона
    gimp.set_background(old_background)
    # Обновляем изоборажение на дисплее
    gimp.displays_flush()
    # Разрешаем запись информации UNDO
    image.undo_group_end()
    gimp.context_pop()


    class test_component(gimpplugin.plugin):
    def start(self):
    gimp.main(self.init, self.quit, self.query, self._run)

    def init(self):
    pass

    def quit(self):
    pass

    def query(self):
    gimp.install_procedure(
    "python_test_rex", # Обязательно упомянуть "python" в начале имени функции: иначе не работате
    "",
    "",
    "Me (Me@gmail.com)",
    "Me",
    "Today",
    "/ReX/Try...",
    "RGB*, GRAY*",
    PLUGIN,
    (
    (PDB_INT32, "run_mode", "Режим запуска"),
    (PDB_IMAGE, "image", "Исходное изображение"),
    (PDB_DRAWABLE, "drawable", "Активный слой")
    ),
    []
    )

    def python_test_rex(
    self,
    runmode,
    image,
    drawable
    ):
    test_rex(runmode, image, drawable) # Вызываем ту функцию которая в начале имени не модержит "python" (собственно это и так понятно, даже не знаю зачем это написал)

    if __name__ == "__main__":
    test_component().start()
    #1580

    spoilt_exile
    Участник

    Угу, я уже понял свою ошибку. у меня нет метода start и вызова там gimp.main. Этот ньюанс почему-то опущен в документации. Странно.

    #1581

    zend
    Участник

    Очень много нюансов не освещено в документации либо освещено недостаточно. Про модуль «gimpui», например, вообще ничего не сказано. Постоянно приходится экспериментировать, что сильно отвлекает…

    spoilt_exile, а вы где документацию берёте? Если не секрет.

    #1584

    spoilt_exile
    Участник

    Брал по вот этой ссылке, но почему-то у меня сейчас там ничего не грузится.

    #1590

    zend
    Участник

    Да. Я тоже иной документации не встречал.

Просмотр 7 сообщений - с 1 по 7 (из 7 всего)

Для ответа в этой теме необходимо авторизоваться.