Как вы называете 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
, Так:
- Что я делаю неправильно?
- Есть ли для этого справочное руководство?
В кортежах для аргументов есть 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_mode
AFAICT - особый дочерний элемент, необязательный параметр, содержащий только ключевые слова. Например, это работает:
>>> 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,