I'm trying to execute the command bpy.ops.uv.snap_selected(target='PIXELS') in Blender Python, but i keep getting that context is incorrect.

I've run the following Python script in order to find the correct context

import bpy

#all the area types except 'EMPTY' from https://docs.blender.org/api/current/bpy.types.Area.html?highlight=area%20type#bpy.types.Area.type

#save the current area
area = bpy.context.area.type

#try each type
for type in types:
    #set the context
    bpy.context.area.type = type

    #print out context where operator works
    if bpy.ops.uv.snap_selected.poll():

#leave the context where it was
bpy.context.area.type = area

But I'm getting nothing printed. I've tested this with the operator bpy.ops.uv.pack_islands for example and I'm getting results.

Why I'm getting no valid area type for bpy.ops.uv.snap_selected? Is it a special operator? Can it be run from Python code?


1 Answer 1


Turns out you have to modify not only the area type but also the ui_type for this to work. For the specific case of bpy.ops.uv.snap_selected operator, the area_type is IMAGE_EDITOR and the ui_type is UV. This piece of code works:

bpy.context.area.type = 'IMAGE_EDITOR'
bpy.context.area.ui_type = 'UV'

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .