При создании собственных операторов иногда бывает нужно передавать в них определенные значения – вызывать операторы с параметрами.
Передаваемый параметр должен быть определен, как свойство оператора.
Создадим простой класс оператора, который будет выводить при вызове переданную в параметре фразу.
Зададим определение класса оператора:
1 2 3 4 |
class TestOperator(bpy.types.Operator): bl_idname = 'test.operator' bl_label = 'test' |
Назначим ему строковое свойство “text”
1 2 3 4 |
text: bpy.props.StringProperty( name = 'text', default = '' ) |
И определим функцию “execute”, которая будет выполняться при вызове оператора:
1 2 3 |
def execute(self, context): print(self.text) return {'FINISHED'} |
Эта функция выводит значение свойства “text”, которое мы будем передавать в качестве параметра при вызове оператора.
Зарегистрируем оператор для дальнейшего использования.
1 2 3 4 5 6 |
def register(): bpy.utils.register_class(TestOperator) if __name__ == '__main__': register() |
Полный текст выглядит следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import bpy class TestOperator(bpy.types.Operator): bl_idname = 'test.operator' bl_label = 'test' text: bpy.props.StringProperty( name = 'text', default = '' ) def execute(self, context): print(self.text) return {'FINISHED'} def register(): bpy.utils.register_class(TestOperator) if __name__ == '__main__': register() |
После регистрации оператора мы можем вызвать его, передав в параметре какой-нибудь текст:
1 2 3 |
bpy.ops.test.operator(text='Hello World!') # Hello World! |
Если вызов оператора привязывается к нажатию кнопки на панели интерфейса, значение параметра указывается следующим образом:
1 2 |
button = self.layout.operator('test.operator', text='Execute') button.text = 'Hello World!' |