# How to apply PropertyGroup to individual data objects?

There's a piece I'm missing on how the PropertyGroup works. I thought that assigning each to an object would hold the data and be available for manipulation later. However the display through the panel always shows the active object (at least the way I have it set up).

Here is an example and the code:

import bpy

def resize(self, context):
o = bpy.context.object
print(o)
o.dimensions.x = o.my_settings.length

class MySettings(bpy.types.PropertyGroup):
reverse : bpy.props.BoolProperty(name = "Direction", description = "Direction",default = False )
length : bpy.props.FloatProperty(name = "Length", description = "Wall Length", default = 12.0, update = resize)

class TEST_PT_Panel(bpy.types.Panel):
bl_idname = "TEST_PT_Panel"
bl_label = "Test Panel"
bl_space_type = "VIEW_3D"
bl_region_type = "UI"

def draw(self, context):
layout = self.layout
scene = context.scene
obj = context.object

box = layout.box()

for ob in bpy.data.objects:
row = box.row()
row.label(text = "Object: " + ob.name)

row = box.row()
row.prop(obj.my_settings, "reverse")

row = box.row()
row.prop(obj.my_settings, "length")

classes = (
TEST_PT_Panel,
MySettings
)

def register():
from bpy.utils import register_class
for cls in classes:
register_class(cls)
bpy.types.Object.my_settings = bpy.props.PointerProperty(type=MySettings)

def unregister():
from bpy.utils import unregister_class
for cls in reversed(classes):
unregister_class(cls)

if __name__ == "__main__":
try:
unregister()
except:
pass
register()


I thought each object would get a copy of MySettings PropertyGroup and that when looping through each object would reference them. However in the example the operator works only on the active object, while the panel seems to only be aware of one instance of the PropertyGroup.

What I'm trying to accomplish is having each 'Length' update the object it references in the panel. At this point not sure if I haven't assigned them correctly somehow, or not using them correctly.

• You have assigned active object as obj and when you loop over the objects, each is assigned as ob. Use ob in the layout props and it wont always be context object. btw would be far better off to loop over context.scene.objects rather than all objects in file which may not be linked to scene. In the resize method o = self.id_data otherwise this will always use context object too. – batFINGER Aug 9 at 20:40