Scripting an inspector/editor for custom properties
This can be achieved with custom property getters/setters.
Use custom getters/setters to read/write to the desired data instead of the default behaviour.
def get_array(self):
    mc = self[&quot;blk_flags&quot;]
    return list (map (lambda i: ((mc &gt;&gt; i) &amp; 1) &gt; 0, range (8)))

def set_array(self, values):
    mc = 0
    for i in range (8):
        if values[i]: mc |= (1 &lt;&lt; i)
    self[&quot;blk_flags&quot;] = mc

class BMBlockSettings(PropertyGroup):
    blk_flags : IntProperty (name=&quot;Bit Flags&quot;)
    blk_arr : BoolVectorProperty(name=&quot;Toggles&quot;, size=8, get=get_array, set=set_array)

class BM_PT_block_inspector(bpy.types.Panel):
    bl_idname = &quot;BM_PT_block_inspector&quot;
    bl_label = &quot;Block&quot;
    bl_space_type = 'PROPERTIES'
    bl_region_type = 'WINDOW'
    bl_context = &quot;object&quot;

    def draw(self, context):
        self.layout.row().prop(context.object.bm_block, &quot;blk_arr&quot;)

def register ():
    bpy.types.Object.bm_block = PointerProperty(type=BMBlockSettings)

def unregister():
    del bpy.types.Object.bm_block