2

>>> 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。这些魔法常数是什么?根据文档,这些似乎是:

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

    但是在这些文档中我找不到PARAM_常量,而且我没有发现它们自省 pdb、gimp 或 gimpfu 中的任何一个。

只是为了完整:显而易见的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
4

2 回答 2

6

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

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

正如这个消息来源所说:

程序浏览器到 Python:

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

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

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

于 2013-09-30T22:19:13.413 回答
1

我发现对自己回答此类问题有用的一些其他资源如下:

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

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,
于 2016-02-11T05:22:11.853 回答