0
我已經創建了一個統一指示器小程序與蟒蛇和林間空地。以下是點擊指示器小程序時出現的屏幕截圖。您可以看到首選項菜單。點擊此首選項菜單後,會打開一個新窗口。Python統一指示器小程序和空白子窗口
Indicator Applet Menu
Preference Window
現在的問題是,當我點擊關閉按鈕,整個應用程序的存在。
如下圖所示觸發首選項窗口中的代碼:
def action_preferences(self, widget):
'''
Show the preferences window
'''
base = PreferenceWindow()
base.main()
self.menu_setup()
preference.py具有下面的代碼:
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()
感謝您的反饋。我已經更改了代碼。其實我正在尋找一種方式來使用偏好類型的窗口,它將在其唯一目的之後關閉。如果你在97行查看這個要點https://gist.github.com/samundra/7637068,你可以看到我已經初始化了一個首選項窗口。我希望這個winodw能夠保持正常的程序流程。 – Samundra
該代碼與您在此發佈的代碼相同。當你調用'base.main()'時,流程將在那裏停止,直到關閉「首選項」窗口。當發生這種情況時,'action_preferences'將會結束,'base'將被銷燬,因爲它超出了範圍。 – xOneca
我注意到你調用過'gtk.main()'兩次。你只需要調用一次**。我已經添加了答案。 – xOneca