Python unity indicator 小程序和 glade 子窗口同时退出

Python unity indicator 小程序和 glade 子窗口同时退出

由于我没有太多的名气。原始问题已发布在 stackoverflow 中,以下是链接:
Python unity 指示器小程序和 glade 子窗口

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

Indicator Applet Menu
指标小程序菜单

Preference Window
偏好设置窗口

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

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

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

    self.menu_setup()

偏好.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")

        # 获取之前保存的偏好设置
        自我.configs = 自我.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)

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

    def parse_configs(自身):
        self.configs = json.load(打开(“config.txt”))
        返回 self.configs

    def save_configs(自身,键,值):
        self.configs[键] = int(值)
        json.dump(self.configs,打开("config.txt", "wb"))
        返回 True

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

        # 尝试图标摘要案例
        如果 self.notify == None:
            self.notify = pynotify.Notification ("尼泊尔负载削减", "组已成功保存至:" + group_number)
        别的:
            self.notify.update("尼泊尔负荷削减", "组已成功保存至:" + group_number)
            自我通知.设置超时(100)

        自我通知.显示()
        打印“保存成功”

    def on_close(自身,小部件):
        打印‘关闭事件调用’

    def on_quit(self,widget):
        系统.退出(0)

    def main(自身):
        gtk.main()

答案1

            “on_preference_window_destroy”:self.on_quit,

这行代码就是你的问题。当窗口被销毁时,你调用了 quit 方法。当你关闭窗口时,窗口会被销毁,从而导致调用 quit 方法。

此外,您不想调用sys.exit(0)来退出 GTK+ 应用程序。您想改用。将您的应用程序转换为使用GTK+ 和相关库的绑定,而不是使用旧的和已弃用的绑定Gtk.main_quit(),也是一个好主意。gobject-introspectionpygtk

相关内容