Das geschlossene Fenster beendet die Anwendung nicht

Ich las über builder.connect_signals, die Handler von Glade-Dateien mit Methoden in deiner Python-Datei abbilden. Anscheinend arbeitet, mit Ausnahme des Hauptfensters, das nicht zerstört, wenn man es schließt. Wenn Sie es vom Terminal laufen, läuft noch und muss mit Ctrl-C die Anwendung vollständig schließen.

Hier ist mein Python-Code:

#!/usr/bin/env python import pygtk import gtk #from gi.repository import Gtk import gtk.glade class Mixer: def __init__(self): self.gladefile = "mixer3.glade" self.wTree = gtk.Builder() self.wTree.add_from_file(self.gladefile) window = self.wTree.get_object("window1") #if (window): # window.connect("destroy", gtk.main_quit) #line_btn = self.wTree.get_object("toggle_linein") #line_btn.connect("on_toggle_linein_activate", btn_linein_activated) self.wTree.connect_signals(self) window.show_all() # must have! def on_toggle_linein_clicked(self, widget): print "Clicked" def Destroy(self, obj): gtk.main_quit() if __name__ == "__main__": m = Mixer() gtk.main() 

2 Solutions collect form web for “Das geschlossene Fenster beendet die Anwendung nicht”

Beim Schließen des Fensters, das dein Fenster zerstört, aber die Hauptschleife des Programms nicht aufhört, musst du das Zerstörungsereignis mit der Methode / Funktion verbinden, die von dieser Schleife beendet ist, die von der letzten Codezeile ablief. Machen Sie eine Änderung in unterhalb der Zeilen der Codes:

 #if (window): # window.connect("destroy", gtk.main_quit) 

ändern:

 if (window): window.connect("destroy", self.Destroy) 

Sie können GtkApplication und GtkApplicationWindow , um es für Sie zu verwalten. Wenn die Anwendung keine offeneren Fenster hat, wird sie automatisch beendet.

 #!/usr/bin/env python import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk from gi.repository import Gio class Mixer(Gtk.Application): def __init__(self): super(Mixer, self).__init__(application_id="org.test", flags=Gio.ApplicationFlags.FLAGS_NONE) def do_activate(self): self.gladefile = "mixer3.glade" self.wTree = Gtk.Builder() self.wTree.add_from_file(self.gladefile) # window1 must be an ApplicationWindow in glade file window = self.wTree.get_object("window1") self.add_window(window) # window should be added to application # but only after 'activate' signal window.show_all() if __name__ == "__main__": m = Mixer() m.run() # No gtk.main(), GtkApplication manages it 
  • Templating überfüllt Inhalt mit Lichtung und pygtk?
  • Gtk treeview: platzieren Sie die Bildtasten auf Zeilen
  • Stoppen Sie pygtk GUI vom Verriegeln während des Langzeitprozesses
  • Twisted + Gtk - Shutdown funktioniert nicht richtig
  • Import gtk / glib produziert ImportError: DLL load failed
  • Wie kann ich die Schriftgröße in GTK ändern?
  • Separate Threads in pygtk Anwendung
  • Wie wechselt man wechselnde Hintergrundzeilenfarben eines gtk.TreeView in pygtk?
  • Python spynner und gtk3 Ausgabe
  • Wie deaktiviere ich die Schaltfläche "Schließen" in GTK?
  • Python, Faden und Gobjekt
  • Python ist die beste Programmiersprache der Welt.