Как вы называете gimp_file_load?


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

2 ответа

Кажется, это немного утечка в абстракции между "базой данных процедур" GIMP и оболочкой Python вокруг нее. run_modeAFAICT - особый дочерний элемент, необязательный параметр, содержащий только ключевые слова. Например, это работает:

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

Как говорит этот источник:

Браузер процедур для Python:

  • Изменить черточки на подчеркивания
  • Опустить любой параметр режима работы
  • Изменить -1 на Нет

(акцент мой); вам не нужно его опускать, это просто ключевое слово arg. (Как показывает мой пример.) Аргументы ключевых слов должны следовать за не ключевыми словами в Python. Вы также можете оставить это, и я предполагаю, что это предполагает какой-то тип по умолчанию. (Хотя я не знаю, какой именно.)

Предположительно, "PARAM_"константы, которые мне были интересны в этом вопросе, раскрывают это, за исключением того, что я не могу найти в документах или самоанализе символические / именованные версии целых чисел.

Вот некоторые дополнительные ресурсы, которые я нашел полезными, чтобы ответить на подобные вопросы для себя:

Например, я думаю, что 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,
Другие вопросы по тегам