我目前正在尝试为Gimp.It编写我自己的插件,这是我第一次,也是我在python中的第一行,所以请温柔地对待我。该代码用于使我的生活更容易为DCS创建肝脏。为此,它需要能够按名称找到一个层,并使其可见/不可见(在我的例子中是countrty标志)。另外,还没有实现,我想从文本层更改文本。
*后加
详细说明:
最终目标是在一个名为"DCS“的污秽模拟器中改变飞机的油漆方案。
开发人员允许我们访问纹理模板。
这些都有不同的基层和层组,不需要改变。
在那里,我添加了自己的图层组,其中包含了我的所有层和层组。
这个脚本应该可以很容易地在高能见度和低能见度油漆方案之间切换。
(尚未实现)这应该更容易通过隐藏各自的“低Vis”、“高Vis”层组来实现。
此外,我想使它有可能个性化的油漆方案,一个名称,标志和一个选择国旗。
Name和Call符号还没有文本层,也没有实现。
飞机天篷两侧将有一面旗帜(左、右)。
每个标志都有自己的层,并且有它们的200+。
其层组结构为“WA”/“国旗+标志”/“旗右”,“旗左”。
在他们的图层组中,我只想让by输入选择的旗帜可见。
#!/usr/bin/env python
from gimpfu import *
def ui_callsign(image, drawable, flag_var, vis_var, name_var, callsign_var):
pdb.gimp_message("main function call")
flag_list = ["ad", "ae", "af", "ag", "ai", "al", "am", "ao", "aq", "ar", "as", "at", "au", "aw", "ax", "az", "ba", "bb", "bd", "be", "bf", "bg", "bh", "bi", "bj", "bl", "bm", "bn", "bo", "bq", "br", "bs", "bt", "bv", "bw", "by", "bz", "ca", "cc", "cd", "cf", "cg", "ch", "ci", "ck", "cl", "cm", "cn", "co", "cr", "cu", "cv", "cw", "cx", "cy", "cz", "de", "dj", "dk", "dm", "do", "dz", "ec", "ee", "eg", "eh", "er", "es", "et", "fi", "fj", "fk", "fm", "fo", "fr", "ga", "gb", "gb-eng", "gb-nir", "gb-sct", "gb-wls", "gd", "ge", "gf", "gg", "gh", "gi", "gl", "gm", "gn", "gp", "gq", "gr", "gt", "gu", "gw", "gy", "hk", "hm", "hn", "hr", "ht", "hu", "id", "ie", "il", "im", "in", "io", "iq", "ir", "is", "it", "je", "jm", "jo", "jp", "ke", "kg", "kh", "ki", "km", "kn", "kp", "kr", "kw", "ky", "kz", "la", "lb", "lc", "li", "lk", "lr", "ls", "lt", "lu", "lv", "ly", "ma", "mc", "md", "me", "mf", "mg", "mh", "mk", "ml", "mm", "mn", "mo", "mp", "mq", "mr", "ms", "mt", "mu", "mv", "mw", "mx", "my", "mz", "na", "nc", "ne", "nf", "ng", "ni", "nl", "no", "np", "nr", "nu", "nz", "om", "pa", "pe", "pf", "pg", "ph", "pk", "pl", "pm", "pn", "pr", "ps", "pt", "pt", "pw", "py", "qa", "re", "ro", "rs", "ru", "rw", "sa", "sb", "sc", "sd", "se", "sg", "sh", "si", "sj", "sk", "sl", "sm", "sn", "so", "sr", "ss", "st", "sv", "sx", "sy", "sz", "tc", "td", "tf", "tg", "th", "tj", "tk", "tl", "tm", "tn", "to", "tr", "tt", "tv", "tw", "tz", "ua", " ug", "um", "us", "uy", "uz", "va", "vc", "ve", "vg", "vi", "vn", "vu", "wf", "ws", "xk", "ye", "yt", "za", "zm", "zw"
] #List of all flags
pdb.gimp_message("created list")
for x in flag_list: #go through list one by one
pdb.gimp_message(x)
if x == flag_var: #if at by user choosen flag:
layer_name_right = x + ".png #1" #add ending to get right layer name
layer_name_left = x + ".png"
layer_right = pdb.gimp_image_get_layer_by_name(image, layer_name_right) #find right layer by layer name
layer_left = pdb.gimp_image_get_layer_by_name(image, layer_name_left)
pdb.gimp_item_set_visible(layer_right, TRUE) #set right layer to visible
pdb.gimp_item_set_visible(layer_left, TRUE)
else: #all other flag layers same procedure as above but set to invisible
layer_name_right = x + ".png #1"
layer_name_left = x + ".png"
layer_right = pdb.gimp_image_get_layer_by_name(image, layer_name_right)
layer_left = pdb.gimp_image_get_layer_by_name(image, layer_name_left)
pdb.gimp_item_set_visible(layer_right, FALSE)
pdb.gimp_item_set_visible(layer_left, FALSE)
pdb.gimp_message("end loop")
return
register(
"python_fu_ui_callsign",
"Enter Name, Callsign and Flag selection",
"Let's you easily change Name, Callsign and Flag on DCS Livery"
"David Buergel", "David Buergel", "2022",
"Ui Callsign",
"Ui Callsign",
"",
[
(PF_IMAGE, "image", "takes current image", None),
(PF_DRAWABLE, "drawable", "Input layer", None),
(PF_OPTION, "flag_var", "Flag", 0,
["ad", "ae", "af", "ag", "ai", "al", "am", "ao", "aq", "ar", "as", "at", "au", "aw", "ax", "az", "ba", "bb", "bd", "be", "bf", "bg", "bh", "bi", "bj", "bl", "bm", "bn", "bo", "bq", "br", "bs", "bt", "bv", "bw", "by", "bz", "ca", "cc", "cd", "cf", "cg", "ch", "ci", "ck", "cl", "cm", "cn", "co", "cr", "cu", "cv", "cw", "cx", "cy", "cz", "de", "dj", "dk", "dm", "do", "dz", "ec", "ee", "eg", "eh", "er", "es", "et", "fi", "fj", "fk", "fm", "fo", "fr", "ga", "gb", "gb-eng", "gb-nir", "gb-sct", "gb-wls", "gd", "ge", "gf", "gg", "gh", "gi", "gl", "gm", "gn", "gp", "gq", "gr", "gt", "gu", "gw", "gy", "hk", "hm", "hn", "hr", "ht", "hu", "id", "ie", "il", "im", "in", "io", "iq", "ir", "is", "it", "je", "jm", "jo", "jp", "ke", "kg", "kh", "ki", "km", "kn", "kp", "kr", "kw", "ky", "kz", "la", "lb", "lc", "li", "lk", "lr", "ls", "lt", "lu", "lv", "ly", "ma", "mc", "md", "me", "mf", "mg", "mh", "mk", "ml", "mm", "mn", "mo", "mp", "mq", "mr", "ms", "mt", "mu", "mv", "mw", "mx", "my", "mz", "na", "nc", "ne", "nf", "ng", "ni", "nl", "no", "np", "nr", "nu", "nz", "om", "pa", "pe", "pf", "pg", "ph", "pk", "pl", "pm", "pn", "pr", "ps", "pt", "pt", "pw", "py", "qa", "re", "ro", "rs", "ru", "rw", "sa", "sb", "sc", "sd", "se", "sg", "sh", "si", "sj", "sk", "sl", "sm", "sn", "so", "sr", "ss", "st", "sv", "sx", "sy", "sz", "tc", "td", "tf", "tg", "th", "tj", "tk", "tl", "tm", "tn", "to", "tr", "tt", "tv", "tw", "tz", "ua", " ug", "um", "us", "uy", "uz", "va", "vc", "ve", "vg", "vi", "vn", "vu", "wf", "ws", "xk", "ye", "yt", "za", "zm", "zw"
]
),
(PF_RADIO, "vis_var", "Vis", "vis_value",
(
("High Vis", "high_vis_value"),
("Low Vis", "low_vis_value")
)
),
(PF_TEXT, "name_var", "Name", "enter Name"),
(PF_TEXT, "callsign_var", "Callsign", "enter Callsign")
],
[],
ui_callsign, menu="<Image>/Filters")
main()插件显示在Gimp和给我所有正确的选择。点击ok之后,灰色就会退出,确定并取消,什么都不会发生。错误控制台中没有消息。
我会很高兴能得到所有的帮助
发布于 2022-04-17 10:43:20
因为您在Ubuntu中,所以可以在终端中启动Gimp以检查错误(这在OSX上也是可行的,在Windows上必须使用gimp-console)。当您这样做时,您在运行脚本时会看到这一点:
Traceback (most recent call last):
File "/Gimp-dev/2.10.24/run/lib/gimp/2.0/python/gimpfu.py", line 735, in response
params.append(wid.get_value())
File "/Gimp-dev/2.10.24/run/lib/gimp/2.0/python/gimpfu.py", line 567, in get_value
return self.active_value
AttributeError: 'RadioEntry' object has no attribute 'active_value'由于您有一个单选按钮部件,所以不难找到原因,您的代码是:
(PF_RADIO, "vis_var", "Vis", "vis_value",
(
("High Vis", "high_vis_value"),
("Low Vis", "low_vis_value")
)
),..。其中,第三个参数应该是默认设置的值。但是,由于"vis_value"不是两个可能的值之一,这是行不通的。将其更改为"high_vis_value"或"low_vis_value"。
还有一些评论:
print代码中的gimp_message()语句将被打印到控制台,这比使用gimp_message()更有效pdb.gimp_text_layer_set_text(layer, text)。但是这假设该层仍然是一个纯文本层。如果不是,在某些情况下,可以恢复文本信息,您可以使用前一层的字体信息重新创建一个新层。在所有情况下,这可能是棘手的,因为您可以重新定位的层,如果它的大小改变。您使用前四项建议编写代码:
#!/usr/bin/env python
from gimpfu import *
flag_list = ["ad", "ae", "af", "ag", "ai", "al", "am", "ao", "aq", "ar", "as", "at", "au", "aw", "ax", "az", "ba", "bb", "bd", "be", "bf", "bg", "bh", "bi", "bj", "bl", "bm", "bn", "bo", "bq", "br", "bs", "bt", "bv", "bw", "by", "bz", "ca", "cc", "cd", "cf", "cg", "ch", "ci", "ck", "cl", "cm", "cn", "co", "cr", "cu", "cv", "cw", "cx", "cy", "cz", "de", "dj", "dk", "dm", "do", "dz", "ec", "ee", "eg", "eh", "er", "es", "et", "fi", "fj", "fk", "fm", "fo", "fr", "ga", "gb", "gb-eng", "gb-nir", "gb-sct", "gb-wls", "gd", "ge", "gf", "gg", "gh", "gi", "gl", "gm", "gn", "gp", "gq", "gr", "gt", "gu", "gw", "gy", "hk", "hm", "hn", "hr", "ht", "hu", "id", "ie", "il", "im", "in", "io", "iq", "ir", "is", "it", "je", "jm", "jo", "jp", "ke", "kg", "kh", "ki", "km", "kn", "kp", "kr", "kw", "ky", "kz", "la", "lb", "lc", "li", "lk", "lr", "ls", "lt", "lu", "lv", "ly", "ma", "mc", "md", "me", "mf", "mg", "mh", "mk", "ml", "mm", "mn", "mo", "mp", "mq", "mr", "ms", "mt", "mu", "mv", "mw", "mx", "my", "mz", "na", "nc", "ne", "nf", "ng", "ni", "nl", "no", "np", "nr", "nu", "nz", "om", "pa", "pe", "pf", "pg", "ph", "pk", "pl", "pm", "pn", "pr", "ps", "pt", "pt", "pw", "py", "qa", "re", "ro", "rs", "ru", "rw", "sa", "sb", "sc", "sd", "se", "sg", "sh", "si", "sj", "sk", "sl", "sm", "sn", "so", "sr", "ss", "st", "sv", "sx", "sy", "sz", "tc", "td", "tf", "tg", "th", "tj", "tk", "tl", "tm", "tn", "to", "tr", "tt", "tv", "tw", "tz", "ua", " ug", "um", "us", "uy", "uz", "va", "vc", "ve", "vg", "vi", "vn", "vu", "wf", "ws", "xk", "ye", "yt", "za", "zm", "zw"
] #List of all flags
suffix_R="png #1"
suffix_L="png"
def ui_callsign(image, flag_var, vis_var, name_var, callsign_var):
image.undo_group_start()
flag_searched=flag_list[flag_var]
for layer in image.layers:
print "Processing %s" % layer.name
tokens=layer.name.split(".",1) # Split on "."
if len(tokens)!=2:
print "No dot"
continue # Not dot in name, ignore other layers
flag,suffix=tokens
if flag not in flag_list:
print "Not a known flag"
continue # Ignore other layers
if flag==flag_searched and suffix==suffix_R: # Requested flag and on the right
print "Recognized"
layer.visible=True
else:
print "%s!=%s or %s!=%s" % (flag,flag_searched,suffix,suffix_R)
layer.visible=False
image.undo_group_end()
return
register(
"python_fu_ui_callsign",
"Enter Name, Callsign and Flag selection",
"Let's you easily change Name, Callsign and Flag on DCS Livery"
"David Buergel", "David Buergel", "2022",
"Ui Callsign",
"Ui Callsign",
"*",
[
(PF_IMAGE, "image", "takes current image", None),
(PF_OPTION, "flag_var", "Flag", 0,flag_list),
(PF_RADIO, "vis_var", "Vis", "vis_value",
(
("High Vis", "high_vis_value"),
("Low Vis", "low_vis_value")
)
),
(PF_TEXT, "name_var", "Name", "enter Name"),
(PF_TEXT, "callsign_var", "Callsign", "enter Callsign")
],
[],
ui_callsign, menu="<Image>/Test")
main()https://stackoverflow.com/questions/71895947
复制相似问题