Update StringProperty on object selection change?
This is the full script for selection and update, where emped the update function in our custom selection tool, the last function replaces the shortcuts of the old select with this operator so no damage is done and when unregistering the addon the shortcuts are reset to the previous state. run the script and open the Tools panel ( T in viewport ) and select an objectto see the string update 



import bpy
from bpy.props import BoolProperty, IntVectorProperty

class MyGroup(bpy.types.PropertyGroup):
    bpy.types.Scene.my_string = bpy.props.StringProperty(name='my_string')

# Define operator to change string property.
last_selection = []

# the selection operator with the update func :
class SelectionOperator(bpy.types.Operator):
    """ Costum selection
    """
    bl_idname = "view3d.select_costum" 
    bl_label = "costum selection"

    extend = BoolProperty(default = False)
    deselect = BoolProperty(default = False)
    toggle = BoolProperty(default = False)
    center = BoolProperty(default = False)
    enumerate = BoolProperty(default = False)
    object = BoolProperty(default = False)
    location = IntVectorProperty(default = (0,0),subtype ='XYZ', size = 2)

    def execute(self, context):
        #select the object
        bpy.ops.view3d.select(extend=self.extend, deselect=self.deselect, toggle=self.toggle, center=self.center, enumerate=self.enumerate, object=self.object, location=(self.location[0] , self.location[1] ))
        #change the property
        global last_selection
        if bpy.context.selected_objects != last_selection:
               last_selection = bpy.context.selected_objects
               bpy.context.scene.my_string = bpy.context.selected_objects[0].name

        return {'FINISHED'}

    def invoke(self, context, event):
        if context.space_data.type == 'VIEW_3D':
            self.location[0] = event.mouse_region_x
            self.location[1]  = event.mouse_region_y
            return self.execute(context)
        else:
                self.report({'WARNING'}, "Active space must be a View3d")
                return {'CANCELLED'}

def replace_shortkey( old_op_name, new_op_name) :

        wm = bpy.context.window_manager
        keyconfig = wm.keyconfigs.active
        keymap = keyconfig.keymaps['3D View']
        items = keymap.keymap_items

        item = items.get(old_op_name, None)
        while item :

                props = item.properties

                extend    = props.extend.real
                deselect  = props.deselect.real
                toggle    = props.toggle.real
                center    = props.center.real
                enumerate = props.enumerate.real
                object    = props.object.real

                item.idname = new_op_name

                props.extend    = extend 
                props.deselect  = deselect
                props.toggle    = toggle
                props.center    = center
                props.enumerate = enumerate
                props.object    = object

                item = items.get( old_op_name, None)


# Draw property and operator.
class HelloWorldPanel(bpy.types.Panel):
    """    """
    bl_label = "active object Panel"
    bl_idname = "OBJECT_PT_my_panel"
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'TOOLS'

    def draw(self, context):
        layout = self.layout
        layout.row().prop(context.scene, "my_string")

# Register.
def register():
    bpy.utils.register_module(__name__)
    replace_shortkey( 'view3d.select', SelectionOperator.bl_idname )

def unregister():
    replace_shortkey(SelectionOperator.bl_idname, 'view3d.select')
    bpy.utils.unregister_module(__name__)

if __name__ == "__main__": 
    register()