I was dealing with the same problem. Here is how I solved it:
Since you are asking about the close button, I will assume that you have been able to make it show.
Code:
def about(self, widget):
print 'showing widget'
self.aboutWidget.run()#show the dialog, holds in a while loop untill close is pressed.
self.aboutWidget.hide()#Hidess the dialog after the close button terminates the while loop.
The key is to call run() to actually show the dialog and follow it by hide.