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

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
Post a Comment