Historical example · test the target property in your Blender version Original context: 2023; PME and Blender versions were not stated.

Outcome

Drive one PME Property from the active object while applying an intentional change to every compatible selected object. This is useful for values such as opacity, display size, or a custom numeric property when a normal multi-edit should preserve each object’s relationship to the active one.

Choose the update rule first

RuleEffect on the selected objectsGood for
Same valueEvery object receives the slider’s exact value.A shared, uniform setting.
DeltaEvery object moves by the active object’s change.Preserving differences between values.
RatioEvery object is scaled by the active object’s relative change.Values where proportional change is meaningful.

The historical example used Object.color[3] as the target. Treat that only as an example target: the reusable part is the selected-set update policy, not the particular Blender property.

A guarded same-value setter

Use a getter for the active object’s displayed value, then update only selected objects that expose the target attribute:

# Getter
return C.active_object.color[3] if C.active_object and hasattr(C.active_object, "color") else 0.0
# Setter
[o.color.__setitem__(3, value) for o in C.selected_objects if hasattr(o, "color")]

This is a compact PME form. Test a new target against one object in Blender’s Python Console before applying it to a selection.

Delta and ratio are different promises

For a delta, compare the incoming value with the active object’s old value, then add that difference to the other objects. Clamp only when the property has a known valid range:

# Readable form: adapt `read` and `write` to the property you own.
old_active = read(active)
delta = value - old_active
write(active, value)
for obj in selected:
    if supports_target(obj) and obj is not active:
        write(obj, clamp(read(obj) + delta))

A ratio instead multiplies the other values by value / old_active. It needs an explicit zero-value policy. The source example chose 0 when the old active value was zero; that may not be the right behavior for your own control.

Pitfalls

  • The active object provides the getter value; filter the selection to objects that support the target property.
  • Avoid hiding a type error with a broad except. Filter or validate the target objects before writing.
  • Define the intended zero-crossing behavior before using a ratio with values that can be negative.
  • One-line setters are hard to audit. Move a non-trivial rule to an external Python script before it becomes a maintenance burden.
  • Test Undo, keyframing, linked data, and mixed object types with a disposable .blend file.

Sources