При передаче в параметры функции значения типа EnumProperty, точно так же, как и при непосредственном присваивании, всегда нужно точно указывать значение из заданного списка, иначе Blender выдаст ошибку.
Например, если при указании иконки для кнопки в параметр icon функции layout.operator задать неверное значение ее идентификатора,
1 2 3 4 5 |
self.layout.operator( "mesh.primitive_cube_add", icon='ICON', text="" ) |
Blender выдаст ошибку:
TypeError: UILayout.operator(): error with keyword argument “icon” – enum “ICON” not found in (‘NONE’, ‘QUESTION’, ‘ERROR’,…)
Все возможные значения идентификаторов, которые можно передавать в нужном параметре функции, можно получить из структуры RNA.
Напишем функцию, которая будет принимать на входе три параметра – тип объекта из которого вызывается функция, имя функции и имя передаваемого в нее параметра, и возвращать список возможных для этого параметра значений.
1 2 3 4 |
import bpy def enum_values(type, func_name, param_name): return [i.identifier for i in type.bl_rna.functions[func_name].parameters[param_name].enum_items] |
Теперь мы можем получить все значения для параметра icon функции layout.operator:
1 2 3 |
print(enum_values(bpy.types.UILayout, 'operator', 'icon')) # ['NONE', 'QUESTION', 'ERROR', 'CANCEL', 'TRIA_RIGHT', ... ] |
и передавать в параметр icon всегда верное значение.