首页 文章

Python统一指示器applet和glade子窗口

提问于
浏览
0

我用python和glade创建了一个统一指示器小程序 . 以下是单击指标小程序时显示的屏幕截图 . 您可以看到首选项菜单 . 单击此首选项菜单后,将打开一个新窗口 .

Indicator Applet Menu

Indicator Applet Menu

Preference Window

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

1 回答

  • 0

    您无法调用 sys.exit() ,因为它会使您的整个应用程序终止(如您所见) . 你要做的就是拨打gtk.main_quit() . 单击关闭按钮时,可以销毁窗口 .

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

    此外,您调用两次 PreferencesWindow.main() (一个在 __init__() 的底部,第二次在实例化后,使用 base.main() ),然后调用gtk.main() . 您必须删除其中一个,否则您的应用程序将卡在第二个上 .

相关问题