I can get an item in my CollectionProperty using index. Like this:
item = context.scene.my_collection_prop[index]
But how to change the item's index? I want to put the item into index=0.
Use my_collection_prop.move(item_index, target_index), it let's you place a collection item (specified via its index in the current collection) to an arbitrary position in the collection.
In a collection with 3 items, you would call move(2, 0), to put the last item on top of the list. The other two items remain in order, there's no swapping of the source and target item:
import bpy
bpy.types.Scene.coll = bpy.props.CollectionProperty(type=bpy.types.PropertyGroup)
coll = bpy.context.scene.coll
coll.clear() # in case you re-run this script, empty the collection
# item 0
item = coll.add()
item.name = "First"
# item 1
item = coll.add()
item.name = "Second"
# item 2
item = coll.add()
item.name = "Third"
print("Before:")
for i, item in enumerate(coll, 1):
print("{}. {}".format(i, item.name))
coll.move(2, 0)
print()
print("After:")
for i, item in enumerate(coll, 1):
print("{}. {}".format(i, item.name))
"""
Before:
1. First
2. Second
3. Third
After:
1. Third
2. First
3. Second
"""
bpy_prop_collection_idprop, which is somewhat an internal type and does indeed not appear anywhere in the documentation. If you register a collection property however, you may calldir(…)on an instance (if registered onbpy.types.Scene, for examplebpy.context.scene) to see all properties and methods:['__doc__', 'add', 'clear', 'move', 'remove']. – CodeManX Jan 23 '15 at 01:21