首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gimpfu插件还没有开始

Gimpfu插件还没有开始
EN

Stack Overflow用户
提问于 2022-04-16 17:15:15
回答 1查看 71关注 0票数 0

我目前正在尝试为Gimp.It编写我自己的插件,这是我第一次,也是我在python中的第一行,所以请温柔地对待我。该代码用于使我的生活更容易为DCS创建肝脏。为此,它需要能够按名称找到一个层,并使其可见/不可见(在我的例子中是countrty标志)。另外,还没有实现,我想从文本层更改文本。

*后加

详细说明:

最终目标是在一个名为"DCS“的污秽模拟器中改变飞机的油漆方案。

开发人员允许我们访问纹理模板。

这些都有不同的基层和层组,不需要改变。

在那里,我添加了自己的图层组,其中包含了我的所有层和层组。

这个脚本应该可以很容易地在高能见度和低能见度油漆方案之间切换。

(尚未实现)这应该更容易通过隐藏各自的“低Vis”、“高Vis”层组来实现。

此外,我想使它有可能个性化的油漆方案,一个名称,标志和一个选择国旗。

Name和Call符号还没有文本层,也没有实现。

飞机天篷两侧将有一面旗帜(左、右)。

每个标志都有自己的层,并且有它们的200+。

其层组结构为“WA”/“国旗+标志”/“旗右”,“旗左”。

在他们的图层组中,我只想让by输入选择的旗帜可见。

代码语言:javascript
复制
#!/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之后,灰色就会退出,确定并取消,什么都不会发生。错误控制台中没有消息。

我会很高兴能得到所有的帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-17 10:43:20

因为您在Ubuntu中,所以可以在终端中启动Gimp以检查错误(这在OSX上也是可行的,在Windows上必须使用gimp-console)。当您这样做时,您在运行脚本时会看到这一点:

代码语言:javascript
复制
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'

由于您有一个单选按钮部件,所以不难找到原因,您的代码是:

代码语言:javascript
复制
        (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"

还有一些评论:

  • 在小部件声明中,您可以重用标志列表,这确保了一致性。
  • 迭代层可能比迭代标记要高效得多。
  • 您不需要“可绘制”参数
  • 当您在终端中运行Gimp时,print代码中的gimp_message()语句将被打印到控制台,这比使用gimp_message()更有效
  • 要优雅地处理选项,可以检查
  • 有关一些调试策略,请参见 (其中一些策略也适用于Linux)
  • 若要更改文本层中的文本,请使用pdb.gimp_text_layer_set_text(layer, text)。但是这假设该层仍然是一个纯文本层。如果不是,在某些情况下,可以恢复文本信息,您可以使用前一层的字体信息重新创建一个新层。在所有情况下,这可能是棘手的,因为您可以重新定位的层,如果它的大小改变。
  • 我真的不知道你在做什么,但我觉得使用适当的层组会使事情变得更容易(您可以切换组的可见性)。

您使用前四项建议编写代码:

代码语言:javascript
复制
#!/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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71895947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档