0

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

Indicator Applet Menu
指示器小程序菜单

Preference Window
偏好窗口

现在的问题是当我单击关闭按钮时,整个应用程序都存在。

触发偏好窗口的代码如下所示:

def action_preferences(self, widget):
    '''
    Show the preferences window
    '''
    base = PreferenceWindow()
    base.main()

    self.menu_setup()

preference.py有以下代码:

导入系统
导入json
导入 pynotify

尝试:
    导入 pygtk
    pygtk.require("2.0")
除了:
    经过
尝试:
    导入gtk
    导入 gtk.glade
除了:
    print("GTK 不可用")
    系统退出(1)

类偏好窗口:
    ui = 无
    配置 = {}
    通知 = 无
    窗口 = 无

    def __init__(self):

        如果不是 pynotify.init ("nepal-loadshedding"):
            系统退出 (1)

        self.ui = gtk.glade.XML("pref_ui.glade")

        # 获取之前保存的偏好
        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)

        迪克 = {
            “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)

        如果 self.window 为无:               
            self.window = self.main()

    def parse_configs(self):
        self.configs = json.load(open("config.txt"))
        返回 self.configs

    def save_configs(self, key, value):
        self.configs[key] = int(value)
        json.dump(self.configs,打开(“config.txt”,“wb”))
        返回真

    def on_save_preference(自我,小部件):
        group_number = self.ui.get_widget("text_group_number").get_text()
        self.save_configs("GROUP", group_number)

        # 试试 icon-summary 的情况
        如果 self.notify == 无:
            self.notify = pynotify.Notification ("Nepal Loadshedding", "组成功保存到:" + group_number)
        别的:
            self.notify.update("尼泊尔减载", "组成功保存到:" + group_number)
            self.notify.set_timeout(100)

        self.notify.show()
        print "保存成功"

    def on_close(自我,小部件):
        print '关闭事件调用'

    def on_quit(自我,小部件):
        系统退出(0)

    定义主要(自我):
        gtk.main()
4

1 回答 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(). 您必须删除其中一个,否则您的应用程序将卡在第二个上。

于 2013-11-22T09:13:06.573 回答