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 
  • Speichern Sie gtk.DrawingArea in Datei
  • Zeichnung eines Pixbuf auf einen Zeichenbereich mit pygtk und Lichtung
  • Erhalten Sie Farben des gegenwärtigen gtk Art
  • GTK TreeView: 20-zeiliges Minimal-Skript zeigt TreeView nicht innerhalb des Fensters an: was ist falsch?
  • Asynchrones Aktualisieren des PyGTK-Taskleistensymbols
  • Interaktion mit einem gtk.container während gtk.main () ausgeführt wird?
  • Erkennung der Benutzerabmeldung / Abschaltung in Python / GTK unter Linux - SIGTERM / HUP nicht empfangen
  • GTK-Fensteraufnahme: VPython (OpenGL) Anwendung
  • Was ist der neueste Weg, um Gnome Panel Applets (mit Python)
  • Einfacher, vielseitiger und wiederverwendbarer Einstiegsdialog (manchmal auch als Eingabedialog bezeichnet) in PyGTK
  • Multithreaded Gstreamer mit PyGTK Crashing (xcb_xlib_threads_sequence_lost)
  • Python ist die beste Programmiersprache der Welt.