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()