2017-11-23 7 views
0

Wenn ich versuche, das folgende Python-Skript durch GIMP gui zu laufen:Typeerror: export_png() nimmt genau 3 Argumente (4 gegeben)

#!/usr/bin/env python 

from gimpfu import * 

def export_png(image, drawable, self): 
    filename=image.name 
    interlace=0 
    compression=0 
    bkgd=0 
    gama=0 
    off=0 
    phys=0 
    time=0 

    pdb.file_png_save(image, drawable, filename, raw_filename, interlace, compression, bkgd, gama, offs, phys, time) 

register(
     "python_fu_export_png", 
     "Exports the current image as png", 
     "Exports the current image as png", 
     "HHP", 
     "HHP", 
     "2017", 
     "<Image>/Image/Export as png", 
     "*", 
     [ 
     (PF_IMAGE, "image", "takes current image", None), 
     (PF_DRAWABLE,"drawable", "input layer",None), 
     ], 
     [], 
     export_png 
     ) 

main() 

ich diesen Fehler:

Traceback (most recent call last): 
    File "/Applications/GIMP.app/Contents/Resources/lib/gimp/2.0/python/gimpfu.py", line 736, in response 
    dialog.res = run_script(params) 
    File "/Applications/GIMP.app/Contents/Resources/lib/gimp/2.0/python/gimpfu.py", line 361, in run_script 
    return apply(function, params) 
TypeError: export_png() takes exactly 3 arguments (4 given) 

Warum ist Das? Ich dachte, dass ich PF_Image und PF_DRAWABLE nur in die Funktion übergebe, warum sage ich, dass ich vier Argumente gebe?

+0

Selbst wird auch als Argument übergeben, wenn es das erste sein soll (und muss nicht angegeben werden) – jhpratt

Antwort

0

Wenn Sie Ihre Funktion durch diese ersetzen:

def export_png(*parms): 
    for p in parms: 
     print type(p),p 

wird deutlich, dass Sie zweimal Ihre Parameter erhalten. Ich denke, dass dies geschieht, weil Sie die veraltete Form der Registrierung verwenden:

„/ Bild/Export als png“

Die aktuelle Form der Registrierung nur "Export as png" wäre, und ein benannter Parameter am Ende: menu="<Image>/Image" (obwohl IMHO wäre dies besser in <Image>/File/Export/ gestellt). Wenn Sie das aktuelle Formular verwenden, werden die ersten beiden Parameter implizit mit dem aktuellen Bild und der aktuellen Ebene gefüllt (wenn sie den richtigen Typ haben), sodass keine Duplizierung erfolgt. In diesem Fall erscheinen sie nicht im Dialog. Wenn sie also die einzigen Parameter sind, wird das Skript direkt aufgerufen, ohne dass ein Dialog angezeigt wird.

self dient keinen Zweck. Es wird in Objektmethoden verwendet, um einen Verweis auf das aktuelle Objekt zu erhalten (und muss der erste Parameter sein). Aber das ist hier nicht der Fall, export_png() ist eine einfache Funktion, keine Objektmethode.

Verwandte Themen