![Python unity indicator 小程序和 glade 子窗口同时退出](https://linux22.com/image/967377/Python%20unity%20indicator%20%E5%B0%8F%E7%A8%8B%E5%BA%8F%E5%92%8C%20glade%20%E5%AD%90%E7%AA%97%E5%8F%A3%E5%90%8C%E6%97%B6%E9%80%80%E5%87%BA.png)
由于我没有太多的名气。原始问题已发布在 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-introspection
pygtk