pygtk - Python unity indicator applet and glade child window -


i have created unity indicator applet python , glade. here screenshot appears when indicator applet clicked. can see preferences menu. when preferences menu clicked, opens new window.

indicator applet menu
indicator applet menu

preference window
preference window

now problem when click on close button, whole application exists.

the code triggers preference window shown below :

def action_preferences(self, widget):     '''     show preferences window     '''     base = preferencewindow()     base.main()      self.menu_setup() 

preference.py has 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 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")          # preference saved         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 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 icon-summary case         if self.notify == none:             self.notify = pynotify.notification ("nepal loadshedding", "group saved : " + group_number)         else:             self.notify.update("nepal loadshedding", "group saved : " + 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() 

you can't call sys.exit() because make entire application terminate (as can see). have call gtk.main_quit(). when click close button, can destroy window.

def on_close(self, widget):     self.ui.get_widget("<window-name>").destroy()  def on_quit(self, widget):     gtk.main_quit() 

additionally, call 2 times preferenceswindow.main() (one @ bottom of __init__() , second time after instantiation, base.main()), in turn calls gtk.main(). have remove 1 of them or application stuck on second one.


Comments

Popular posts from this blog

.htaccess - First slash is removed after domain when entering a webpage in the browser -

Automatically create pages in phpfox -

c# - Farseer ContactListener is not working -