暗中模索のトライ を、またもや。
最近更新された 色 と、利用頻度が高いと思われる 選択項目 と、を。
Disalog 表示って、... 難しい。
前回 は、
基本的な GUI (Dialog) を出す為の トレーニング で、
文字列、実数、整数、真偽 の4項目を受け入れるものを。
でしたね。
今回は、其れに 色と選択項目とを増やします。
参考にしたのは、標準添付される foggify.py と palette-sort.py とです。
選択項目の書き方は 試行錯誤 の上で、です。
一応、動く様になったので、公開しましょう。
色に関しては、
foogify.py の 最新版 を参考にすれば OK です。
選択項目に関しては、先にも述べた様に、梃子摺りました。
因みに、選択項目の利用は頻度が高いと思いますので、
今後、サンプルが増えれば、別の記述方法も出て来る気がします。
きっと、色々な書き方があると思っています。
まぁ、参考と言う事で。
今回の件は、後述の Code をご覧戴きたいのですが、
留意点を。
前回の4項目と同様に、
Code 最後に出て来る コメント行 # Args Order In Dialog
に続く procedure.add_argument_from_property()
の順序で、
Dialog での表示の上下が決まる(と思う)のですが、
int_combo (Integer ComboBox) がある状態で、
最初辺りの コメント行 # Procedure 関数(関数名・引数・処理)
に続く部分で、 dialog.fill(None) とやって仕舞うと、
同じ変数 (此処では int_opt) に対して、二重に表示されます。
そう、普通の int 項目と 選択項目と です。
此の場合、項目の最後に 選択項目 (ComboBox Style) が追加表示されます。
なので、
dialog.fill(None) とは書かず、
各変数名を順番に .fill しています。
面倒ですが、止むを得ない、です。
さて、code を。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# Python for GIMP 2.99.19 +
import gi
gi.require_version('Gimp', '3.0')
from gi.repository import Gimp
gi.require_version('GimpUi', '3.0')
from gi.repository import GimpUi
gi.require_version('Gegl', '0.4')
from gi.repository import Gegl
from gi.repository import GObject
from gi.repository import GLib
from gi.repository import Gio
def N_(message): return message
def _(message): return GLib.dgettext(None, message)
# Define Int Store Items
ITEM_OPTIONS =("ITEM0", "ITEM1", "ITEM2", "ITEM3")
# ITEM0 = 0
# ITEM1 = 1
# ITEM2 = 2
# ITEM3 = 3
import sys
# Procedure 関数(関数名・引数・処理)
# #def shiro_dialog_args6_test2_api3(procedure, run_mode, image, n_drawables, drawables, args, data):
def shiro_dialog_args6_test2_api3(procedure, run_mode, image, n_drawables, drawables, config, data):
Gegl.init(None) # for Color Handling
_color = Gegl.Color.new("black")
_color.set_rgba(0.94, 0, 0, 1.0)
# Work around not being able to set default color by only setting it
# when color in our config is None. This won't help when resetting to
# factory default. This also fixes a critical when running without
# changing the color away from None.
color = config.get_property('color')
if color is None:
config.set_property('color', _color)
# Pre-Start of proc for GIMP3
if run_mode == Gimp.RunMode.INTERACTIVE:
GimpUi.init('python-fu-shiro-dialog-args6-test2-api3')
dialog = GimpUi.ProcedureDialog.new(procedure, config)
# dialog.fill(None) # Not Use, int_opt Is Duplicate Displayed
dialog.fill(["lyr_name1"])
dialog.fill(["float_val"])
dialog.fill(["int_val"])
dialog.fill(["is_ok"])
# Get color Setting
dialog.get_color_widget('color', True, GimpUi.ColorAreaType.FLAT)
dialog.fill(["color"])
# Get int combo
dialog.get_int_combo("int_opt", GimpUi.IntStore.new (ITEM_OPTIONS))
dialog.fill(["int_opt"])
if not dialog.run():
dialog.destroy()
return procedure.new_return_values(Gimp.PDBStatusType.CANCEL, GLib.Error())
else:
dialog.destroy()
lyr_name1 = config.get_property('lyr_name1')
float_val = config.get_property('float_val')
int_val = config.get_property('int_val')
is_ok = config.get_property('is_ok')
color = config.get_property('color')
int_opt = config.get_property('int_opt')
# Start
img = image
lyr = drawables[0]
# Message EndWith ¥n : Dialog, WithOut ¥n : ErrorConsole/StatusBar
Gimp.message("Dialog Args --------- ¥n" + ¥
" image : (id#" + str(img.get_id()) + ") " + img.get_name() + " ¥n" + ¥
" drawables count : " + str(n_drawables) + " ¥n" + ¥
" layer : (id#" + str(lyr.get_id()) + ") " + lyr.get_name() + " ¥n" + ¥
" ------------- ¥n" + ¥
" lyr_name1 : " + str(type(lyr_name1)) + " " + lyr_name1 + " ¥n" + ¥
" float_val : " + str(type(float_val)) + " " + str(float_val) + " ¥n" + ¥
" int_val : " + str(type(int_val)) + " " + str(int_val) + " ¥n" + ¥
" is_ok : " + str(type(is_ok)) + " " + str(is_ok) + " ¥n" + ¥
" color : " + str(type(color)) + " " + str(color.get_rgba()) + " ¥n" + ¥
" int_opt : " + str(type(int_opt)) + " " + str(int_opt) +
" = " + str(ITEM_OPTIONS[int_opt]) + " ¥n" + ¥
""
)
# End of proc for GIMP3
return procedure.new_return_values(Gimp.PDBStatusType.SUCCESS, GLib.Error())
class ShiroDialogArgs6Test2Api3 (Gimp.PlugIn):
## Parameters ##
__gproperties__ = {
"lyr_name1": (str,
_("Add Layer Name"),
_("Add Layer Name Tooltip"),
_("_Test"),
GObject.ParamFlags.READWRITE),
"float_val" : (float,
_("Set Double : "),
_("Set Double Value Tooltip"),
0.0, 100.0, 50.0,
GObject.ParamFlags.READWRITE),
"int_val" : (int,
_("Set Integer : "),
_("Set Integer Value Tooltip"),
0, 100, 30,
GObject.ParamFlags.READWRITE),
"is_ok": (bool,
_(" : Is OK ? "),
_("Is OK ? Tooltip"),
False,
GObject.ParamFlags.READWRITE),
"int_opt" : (int,
_("Select Item : " + str(ITEM_OPTIONS)),
_("Select Item , Get Int Value Tooltip"),
0, len(ITEM_OPTIONS), 1,
GObject.ParamFlags.READWRITE),
}
color = GObject.Property(type =Gegl.Color, default=None,
nick =_("Set Color : "),
blurb=_("Set Color Tooltip"))
## GimpPlugIn virtual methods ##
def do_set_i18n(self, procname):
return True, 'gimp30-python', None
def do_query_procedures(self):
return [ 'python-fu-shiro-dialog-args6-test2-api3' ]
def do_create_procedure(self, name):
procedure = Gimp.ImageProcedure.new(self, name,
Gimp.PDBProcType.PLUGIN,
shiro_dialog_args6_test2_api3, None)
procedure.set_image_types("RGB*");
procedure.set_sensitivity_mask (Gimp.ProcedureSensitivityMask.DRAWABLE |
Gimp.ProcedureSensitivityMask.DRAWABLES)
procedure.set_documentation (_("Args In Dialog Test2 6-Args"),
_("Args In Dialog Test2 For GIMP 2.99.19 +"),
name)
procedure.set_menu_label(_("Dialog Args6 Test2 Api3"))
procedure.set_attribution("ShiroYuki_Mot",
"Copyright 2024- ShiroYuki_Mot",
"2024/03/21")
procedure.add_menu_path ("<Image>/Script-Py/Test/")
# procedure.add_argument_from_property(self, "<<arg_name_n>>") ...
# Args Order In Dialog
procedure.add_argument_from_property(self, "lyr_name1")
procedure.add_argument_from_property(self, "float_val")
procedure.add_argument_from_property(self, "int_val")
procedure.add_argument_from_property(self, "is_ok")
procedure.add_argument_from_property(self, "color")
procedure.add_argument_from_property(self, "int_opt")
return procedure
Gimp.main(ShiroDialogArgs6Test2Api3.__gtype__, sys.argv)
ざっと、こんな感じ です。
因みに、Dialog と 実行結果 との表示を例示します。
次回 は また2項目を増やします。 同じ書き方で5項目がいける筈です。
0 件のコメント:
コメントを投稿