GIMP3でPython-Fu:メニューダイアログのサンプルコード

コンピュータ

メニューでテキストを入力するダイアログを表示します。

ソースコード

ファイル名:sample_dialog_plugin\sample_dialog_plugin.py

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

import sys
import gi
gi.require_version('Gimp', '3.0')
gi.require_version('GimpUi', '3.0')
from gi.repository import Gimp, GimpUi, GObject

PROC_NAME = 'python-fu-sample-dialog'

class SampleDialog(Gimp.PlugIn):
    def do_query_procedures(self):
        return [PROC_NAME]

    def do_create_procedure(self, name):
        if name != PROC_NAME:
            return None
        proc = Gimp.ImageProcedure.new(self, name, Gimp.PDBProcType.PLUGIN, self.run, None)
        proc.set_menu_label('サンプルダイアログ…')
        proc.add_menu_path('<Image>/Filters/Python-Fu')
        # レイヤー選択の有無どちらでも起動可
        proc.set_sensitivity_mask(Gimp.ProcedureSensitivityMask.DRAWABLE |
                                  Gimp.ProcedureSensitivityMask.NO_DRAWABLES)
        proc.set_documentation('Sample dialog using ProcedureDialog', 'Demo', None)

        # ---- 自動生成ダイアログ用の引数定義 ----
        proc.add_string_argument('message', 'メッセージ', None, '', GObject.ParamFlags.READWRITE)
        proc.add_boolean_argument('option', 'オプション', 'オプションを有効にする', False, GObject.ParamFlags.READWRITE)
        return proc

    # 正しいシグネチャ(drawables はリスト、最後は data)
    def run(self, procedure, run_mode, image, drawables, config, data):
        if run_mode == Gimp.RunMode.INTERACTIVE:
            GimpUi.init('sample-dialog')
            dialog = GimpUi.ProcedureDialog.new(procedure, config, 'サンプルダイアログ')
            dialog.fill(['message', 'option'])
            if not dialog.run():
                dialog.destroy()
                return procedure.new_return_values(Gimp.PDBStatusType.CANCEL, None)
            dialog.destroy()

        msg = config.get_property('message')
        opt = config.get_property('option')
        Gimp.message(f'入力結果: message="{msg}", option={opt}')
        return procedure.new_return_values(Gimp.PDBStatusType.SUCCESS, None)

Gimp.main(SampleDialog.__gtype__, sys.argv)

実行イメージ

・メニューに登録されている様子
image

・ダイアログ
image

・結果
image

コメント