How to display progress notifications from an Operator?
This is a hack, at best. So, when an image in blender is rendered, it provides a convenient status bar at the top of the window.  The problem is a script has to be a renderEngine to take advantage of this.  The solution? Make your script a custom renderEngine, then have your button invoke the render function.

Here's a very basic example of updating the status bar, and adding a status string to the render window. You would put the code you want run in the myCode function.

import bpy
import time

class CustomRenderEngine(bpy.types.RenderEngine):
    # These three members are used by blender to set up the
    # RenderEngine; define its internal name, visible name and capabilities.
    bl_idname = 'custom_renderer2'
    bl_label = 'Progress Bar Example2'
    bl_use_preview = True
    # This is an example function, put your code here
    def myCode(engine):
        engine.update_stats("Starting","")        #update the stats in render window
        time.sleep(1)
        engine.update_stats("Running","halfway")
        engine.update_progress(0.5)               #update the progress bar
        time.sleep(1)

    # This is the method called by blender
    def render(self, scene):
        self.myCode()

# Register the RenderEngine
bpy.utils.register_class(CustomRenderEngine)


Then select your new renderEngine. From the top of the blender window click "Blender Render" and select "Progress Bar Example."  Now you can run your script by pressing F12.  One other method that might be useful is test_break, which checks to see if the render(or script, in this case) has been cancelled.
One last thing to note, directly executing a script (eg. with altP) doesn't display the progress bar, however when the render function (byp.render.render) is bound to a panel it displays correctly. 

See these for more information:
Blender artists, setting progress bar values
Blender Python Api, RenderEngine