I have created an unity indicator applet with python and glade. Here is the screenshot that appears when indicator applet is clicked. You can see the preferences menu. When this preferences menu is clicked, it opens a new window.
Indicator Applet Menu

Preference Window

Now the problem is when I click on close button, the whole application exists.
The code that triggers the preference window is as shown below :
def action_preferences(self, widget):
    '''
    Show the preferences window
    '''
    base = PreferenceWindow()
    base.main()
    self.menu_setup()
preference.py has the following code :
import sys
import json
import pynotify
try:
    import pygtk
    pygtk.require("2.0")
except:
    pass
try:
    import gtk
    import gtk.glade
except:
    print("GTK is not Available")
    sys.exit(1)
class PreferenceWindow:
    ui = None
    configs = {}
    notify = None
    window = None
    def __init__(self):
        if not pynotify.init ("nepal-loadshedding"):
            sys.exit (1)
        self.ui = gtk.glade.XML("pref_ui.glade")
        # Get the preference saved previously
        self.configs = self.parse_configs()
        saved_group_value = str(self.configs.get("GROUP"))
        self.ui.get_widget("text_group_number").set_text(saved_group_value)
        dic = {
            "on_btn_pref_ok_clicked":self.on_save_preference,
            "on_btn_pref_close_clicked":self.on_close,
            "on_preference_window_destroy":self.on_quit,
            }
        self.ui.signal_autoconnect(dic)
        if self.window is None:               
            self.window = self.main()
    def parse_configs(self):
        self.configs = json.load(open("config.txt"))
        return self.configs
    def save_configs(self, key, value):
        self.configs[key] = int(value)
        json.dump(self.configs, open("config.txt", "wb"))
        return True
    def on_save_preference(self, widget):
        group_number = self.ui.get_widget("text_group_number").get_text()
        self.save_configs("GROUP", group_number)
        # try the icon-summary case
        if self.notify == None:
            self.notify = pynotify.Notification ("Nepal Loadshedding", "Group saved successfully to : " + group_number)
        else:
            self.notify.update("Nepal Loadshedding", "Group saved successfully to : " + group_number)
            self.notify.set_timeout(100)
        self.notify.show()
        print "Saved successfully"
    def on_close(self, widget):
        print 'close event called'
    def on_quit(self, widget):
        sys.exit(0)
    def main(self):
        gtk.main()