# Python Scripting : AttributeError : 'SpaceTextEditor ' object has no attribute 'context'

I am trying to write a python script using the info panel.

The first part of the code is unwrapping a mesh which is executing successfully.

The second part is to change the viewport shading to MATERIAL which is used for rendering. But when I try to run the script I get this error .

Thirdly, I am trying to import a .png image. But its not being displayed in the UV Editor.

The code is shown below:

import bpy
for obj in bpy.data.objects:
if(obj.type == 'MESH'):
bpy.context.scene.objects.active = obj
bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.mesh.select_all(action='TOGGLE')
bpy.ops.uv.unwrap(method='ANGLE_BASED', margin=0.001)
bpy.context.space_data.context = 'MATERIAL'
bpy.ops.material.new()
bpy.ops.image.open(filepath="//finger1.png", directory="C:\\Users\\KM\\Desktop\\blender\\Test 1\\", files=[{"name":"finger1.png", "name":"finger1.png"}], relative_path=True, show_multiview=False)


• bpy.context.space_data depends on the active window (clicking on the materials button the the property editor). This line can be removed. – ideasman42 Jun 24 '15 at 21:11
• @ideasman42 - So if i need to render it using the python script, I will have to keep the 3D view in Materials mode and then render it? Or is there any other way to do it? – shreyas kamath Jun 24 '15 at 21:46
• To put it differently, the script would not give this exception if you ran it within the properties editor. However changing this button is not even important for the running of the script, so the line can be removed. – ideasman42 Jun 24 '15 at 22:34

I am a big advocate of avoiding bpy.ops as much as possible. I wrote an example at http://web.purplefrog.com/~thoth/blender/python-cookbook/load-image-texture.html which might help you understand how to use python to create a material using an image texture:

Here is the most important bit:

def material_for_texture(fname):

tex = bpy.data.textures.new(fname, 'IMAGE')
tex.image = img

mat = bpy.data.materials.new(fname)
ts = mat.texture_slots[0]
ts.texture = tex
ts.texture_coords = 'ORCO'

return mat

fname = "/var/tmp/blender/mohawk-seal0001.png"
obj = bpy.context.active_object
mat = material_for_texture(fname)
if len(obj.data.materials)<1:
obj.data.materials.append(mat)
else:
obj.data.materials[0] = mat