你怎么称呼gimp_file_load?

时间:2013-09-30 22:05:41

标签: python gimp gimpfu


>>> pdb.gimp_file_load.nparams
3
>>> pprint.pprint(pdb.gimp_file_load.params)
((0,
  'run-mode',
  'The run mode { RUN-INTERACTIVE (0), RUN-NONINTERACTIVE (1) }'),
 (4, 'filename', 'The name of the file to load'),
 (4, 'raw-filename', 'The name as entered by the user'))
>>> fname = 'a filename'
>>> img = pdb.gimp_file_load(gimpfu.RUN_NONINTERACTIVE, fname, fname)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: wrong number of parameters

那么,我在这里做错了什么?根据该方法本身,它需要三个相当好的文档参数。我把它想要的三件事传递给我,我收到TypeError。所以:

  1. 我做错了什么?
  2. 是否有参考手册?
  3. 在参数的元组中,有一个0,一个4和一个4.这些魔术常数是什么?根据{{​​3}},这些似乎是:

      

    参数类型(PARAM_ *常量之一)

    但是在这些文档中我找不到PARAM_常量,我没有发现它们反省了pdb,gimp或gimpfu。

  4. 只是为了完成:显而易见的help(pdb.gimp_file_load),并没有那么有用:

    >>> help(pdb.gimp_file_load)
    Help on PDBFunction object:
    
    class PDBFunction(__builtin__.object)
     |  Methods defined here:
     |  
     |  __call__(...)
     |      x.__call__(...) <==> x(...)
     |  
     |  __repr__(...)
     |      x.__repr__() <==> repr(x)
     |  
     |  ----------------------------------------------------------------------
     |  Data descriptors defined here:
     |  
     |  nparams
     |  
     |  nreturn_vals
     |  
     |  params
     |  
     |  proc_author
     |  
     |  proc_blurb
     |  
     |  proc_copyright
     |  
     |  proc_date
     |  
     |  proc_help
     |  
     |  proc_name
     |  
     |  proc_type
     |  
     |  return_vals
     |  
     |  ----------------------------------------------------------------------
     |  Data and other attributes defined here:
     |  
     |  __new__ = <built-in method __new__ of type object>
     |      T.__new__(S, ...) -> a new object with type S, a subtype of T
    

2 个答案:

答案 0 :(得分:4)

GIMP的“过程数据库”和围绕它的Python包装器之间的抽象似乎有些漏洞。 run_mode,AFAICT,是一个特殊的孩子,是一个可选的,仅限关键字的参数。例如,这有效:

>>> img = pdb.gimp_file_load(fname, fname, run_mode=gimpfu.RUN_NONINTERACTIVE)
>>> img
<gimp.Image 'fname.xcf'>

正如this source所说:

  

程序浏览器到Python:

     
      
  • 将破折号更改为下划线
  •   
  • 省略任何运行模式参数
  •   
  • 将-1更改为无
  •   

(强调我的);你真的不需要省略它,它只需要一个关键字arg。 (正如我的例子所示。)关键字args必须遵循Python中的非关键字args。你也可以把它关掉,我猜它会假定某种默认值。 (我不知道哪个。)

据推测,我在问题中对此感到好奇的“PARAM_”常数揭示了这一点,除了我在文档或内省中找不到整数的符号/命名版本。

答案 1 :(得分:1)

我发现有些额外的资源可以帮助我自己回答这样的问题:

例如,我认为PARAM_类型是这些enum值,用于定义插件所采用的每个参数的类型:(大概PF用于“PythonFu”和“PDB” “是为”程序数据库“)

PF_INT8        : PDB_INT8,
PF_INT16       : PDB_INT16,
PF_INT32       : PDB_INT32,
PF_FLOAT       : PDB_FLOAT,
PF_STRING      : PDB_STRING,
#PF_INT8ARRAY   : PDB_INT8ARRAY,
#PF_INT16ARRAY  : PDB_INT16ARRAY,
#PF_INT32ARRAY  : PDB_INT32ARRAY,
#PF_FLOATARRAY  : PDB_FLOATARRAY,
#PF_STRINGARRAY : PDB_STRINGARRAY,
PF_COLOR       : PDB_COLOR,
PF_ITEM        : PDB_ITEM,
PF_DISPLAY     : PDB_DISPLAY,
PF_IMAGE       : PDB_IMAGE,
PF_LAYER       : PDB_LAYER,
PF_CHANNEL     : PDB_CHANNEL,
PF_DRAWABLE    : PDB_DRAWABLE,
PF_VECTORS     : PDB_VECTORS,

PF_TOGGLE      : PDB_INT32,
PF_SLIDER      : PDB_FLOAT,
PF_SPINNER     : PDB_INT32,

PF_FONT        : PDB_STRING,
PF_FILE        : PDB_STRING,
PF_BRUSH       : PDB_STRING,
PF_PATTERN     : PDB_STRING,
PF_GRADIENT    : PDB_STRING,
PF_RADIO       : PDB_STRING,
PF_TEXT        : PDB_STRING,
PF_PALETTE     : PDB_STRING,
PF_FILENAME    : PDB_STRING,
PF_DIRNAME     : PDB_STRING,
PF_OPTION      : PDB_INT32,