2017-05-28 4 views
0

J'essaye d'écrire un plugin Python-Fu pour GIMP, mais en ajoutant plus de 4 paramètres d'entrée (incluant les paramètres Image et Drawable), le script ne fonctionnera pas courir du tout. J'ai essayé ceci avec différents types de paramètres d'entrée et ils produisent tous le même résultat. Quelqu'un at-il une idée de la raison pour laquelle cela se produit? Est-ce que je manque quelque chose d'évident?Le script GIMP Python-Fu ne fonctionne pas avec plus de 4 paramètres

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" 
) 

EDIT:

est en dessous du plein, le script entièrement fonctionnel, y compris le code 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

probablement pas un problème de trop de paramètres, il y a des scripts autour avec trop de paramètres adapter un écran. Mais en pratique, je n'ai pas réussi à faire fonctionner votre code, même en gardant le PF_IMAGE (btw, vous n'avez pas besoin de PF_DRAWABLE pour ce script). Il doit y avoir quelque chose de subtil qui fait échouer l'inscription (ou qui n'arrive pas du tout). Pouvez-vous modifier votre question pour ajouter le code qui s'inscrit correctement? – xenoid

+0

@xenoid Terminé. Cependant, la seule différence entre le code fonctionnel et le code non fonctionnel est exactement ce même paramètre d'entrée supplémentaire. – MrKagouris

+0

Vous savez que votre fonction Python actuelle ('guide_maker') doit correspondre à la signature que vous passez pour vous inscrire, n'est-ce pas? – jsbueno

Répondre

1

Vous devez utiliser les valeurs par défaut entières dans l'enregistrement, et non 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

Merci! C'est très utile à savoir. – MrKagouris