2017-05-28 63 views
0

我想爲GIMP編寫一個Python-Fu插件,但添加4個以上的輸入參數(包括Image和Drawable參數)將導致腳本不能運行一切運行。我已經嘗試過使用各種輸入參數類型,它們都產生相同的結果。有人對此有何看法?我錯過了明顯的東西嗎?GIMP Python-Fu腳本不能運行超過4個參數

register(
"python_fu_guide_maker", 
"Guide Maker", 
"Creates guides with specified spacing.", 
"MrKagouris", "", "2017", 
"Guide Maker", 
"*", 
[ 
    (PF_IMAGE, "image", "Input Image", None), 
    (PF_DRAWABLE, "drawable", "Input Layer", None), 
    (PF_INT, "hspace", "Horizontal Spacing", None), 
    (PF_INT, "vspace", "Vertical Spacing", None), 
    (PF_BOOL, "percent", "By percent?", None) 
], 
[], 
guide_maker, 
menu="<Image>/Image/Guides" 
) 

編輯:

下面是包括Python代碼完整,功能齊全的腳本。

#!/usr/bin/env python 

from gimpfu import * 

def guide_by_num(image, hspace, vspace): 
    imageHeight = pdb.gimp_image_height(image) 
    imageWidth = pdb.gimp_image_width(image) 
    if (hspace <= 0 or vspace <= 0): 
     return       # Input validity check. 
    hGuides = int(imageHeight/hspace) # Calculates the 
    vGuides = int(imageWidth/vspace) # number of guides. 
    for i in range(2): 
     pdb.gimp_image_add_hguide(image, i * imageHeight) # Adds guides to 
     pdb.gimp_image_add_vguide(image, i * imageWidth) # image edges. 
    for i in range(1, hGuides):       # Adds the horizontal 
     pdb.gimp_image_add_hguide(image, i * hspace) # guides. 
    for i in range(1, vGuides):       # Adds the vertical 
     pdb.gimp_image_add_vguide(image, i * vspace) # guides. 

def guide_by_percent(image, hspace, vspace): #Not used. 
    imageHeight = pdb.gimp_image_height(image) 
    imageWidth = pdb.gimp_image_width(image) 
    hspace = int(hspace * (imageWidth * 0.01)) 
    vspace = int(vspace * (imageHeight * 0.01)) 
    if (hspace <= 0 or vspace <= 0): 
     return 
    hGuides = int(imageHeight/hspace) 
    vGuides = int(imageWidth/vspace) 
    for i in range(2): 
     pdb.gimp_image_add_hguide(image, i * imageHeight) 
     pdb.gimp_image_add_vguide(image, i * imageWidth) 
    for i in range(1, hGuides): 
     pdb.gimp_image_add_hguide(image, i * hspace) 
    for i in range(1, vGuides): 
     pdb.gimp_image_add_vguide(image, i * vspace) 

def guide_maker(image, drawable, hspace, vspace): 
    guide_by_num(image, hspace, vspace) 

register(
    "python_fu_guide_maker", 
    "Guide Maker", 
    "Creates guides with specified spacing.", 
    "MrKagouris", "", "2017", 
    "Guide Maker", 
    "*", 
    [ 
     (PF_IMAGE, "image", "Input Image", None), 
     (PF_DRAWABLE, "drawable", "Input Layer", None), 
     (PF_INT, "hspace", "Horizontal Spacing", None), 
     (PF_INT, "vspace", "Vertical Spacing", None), 
     #(PF_BOOL, "percent", "By percent?", None) 
    ], 
    [], 
    guide_maker, 
    menu="<Image>/Image/Guides" 
    ) 

main() 
+0

可能不會太多參數的問題,有劇本有太多的參數,以各地適合一個屏幕。但在實踐中,我甚至無法讓代碼工作,即使只保留PF_IMAGE(順便說一句,你不需要這個腳本的PF_DRAWABLE)。必須有一些細微的東西使註冊失敗(或根本不會發生)。你能編輯你的問題來添加正確註冊的代碼嗎? – xenoid

+0

@xenoid完成。然而,功能代碼和非功能代碼之間的唯一區別恰恰就是一個額外的輸入參數。 – MrKagouris

+0

你知道你實際的Python函數('guide_maker')必須與你傳遞的註冊信息相匹配,不是嗎? – jsbueno

回答

1

你必須登記,不None使用整數默認值:

[ 
    (PF_IMAGE, "image", "Input Image", None), 
    (PF_DRAWABLE, "drawable", "Input Layer", None), 
    (PF_INT, "hspace", "Horizontal Spacing", 0), 
    (PF_INT, "vspace", "Vertical Spacing", 0), 
    (PF_BOOL, "percent", "By percent?", 1) 
], 

enter image description here

+0

謝謝!這是非常有用的知道。 – MrKagouris