Puisque je n'ai pas beaucoup de réputation. La question d'origine a été publiée dans stackoverflow et voici le lien:
applet d'indicateur d'unité Python et fenêtre enfant de clairière
J'ai créé une applet d'indicateur d'unité avec python et glade. Voici la capture d'écran qui apparaît lorsque vous cliquez sur l'applet d'indicateur. Vous pouvez voir le menu des préférences. Lorsque ce menu des préférences est cliqué, il ouvre un nouvelle fenetre.
Indicator Applet Menu
Preference Window
Maintenant, le problème est que lorsque je clique sur le bouton Fermer, toute l'application existe.
Le code qui déclenche la fenêtre de préférence est le suivant:
def action_preferences(self, widget):
'''
Show the preferences window
'''
base = PreferenceWindow()
base.main()
self.menu_setup()
preference.py a le code suivant:
import sys import json import pynotify essayez: import pygtk pygtk.require (" 2.0 ") Sauf: Réussite Essayez: Import gtk Import gtk.glade Sauf: print ("GTK n'est pas disponible") sys.exit (1) class PreferenceWindow: ui = None configs = { } notify = None window = None def __init __ (self): sinon pynotify.init (" nepal-loadshedding "): sys.exit (1) self.ui = gtk.glade.XML (" pref_ui.glade ") # Obtenez la préférence enregistrée précédemment 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": se lf.on_save_preference, "on_btn_pref_close_clicked": self.on_close, "on_preference_window_destroy": self.on_quit, } self.ui. signal_autoconnect (dic) si self.window est 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 [clé] = int (valeur) 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) # Essayez le cas de l'icône-résumé Si self.notify == Aucun: Self.notify = pynotify.Notificati on ("Nepal Loadshedding", "Groupe enregistré avec succès dans:" + group_number) sinon: self.notify.update ("Nepal Loadshedding", "Groupe enregistré avec succès dans:" + group_number) self.notify.set_timeout (100) self.notify.show () imprimer "Enregistré avec succès" def on_close (self, widget): print 'close event called' def on_quit (self, widget): sys.exit (0) def main (self): gtk.main ()
"on_preference_window_destroy": self.on_quit,
Cette ligne est votre problème. Lorsque la fenêtre est détruite, vous appelez une méthode quit. Lorsque vous fermez la fenêtre, elle est détruite, ce qui entraîne l'appel de votre méthode quit.
De plus, vous ne voulez pas appeler sys.exit(0)
pour quitter une application GTK +. Vous souhaitez utiliser Gtk.main_quit()
à la place. Ce serait également une bonne idée de convertir votre application en utilisant le gobject-introspection
liaisons pour GTK + et les bibliothèques associées, plutôt que d'utiliser les anciennes et obsolètes liaisons pygtk
.