Ich hole mir ein Fenster aus einer Glade datei, diesen Widget rufe ich dann auf mit ".show_all()" so wie immer eben, wenn ich das Fenster dann zerstöre also ".destroy()", wie kann ich es dann wieder aufrufen? Denn mit ".show_all()" geht es dann nicht mehr. Muss ich es neu definieren? Denn das geht dann irgendwie auch nicht.
Wollte es erst nur mit ".show_all()" und ".hide_all()" machen, aber egal ob ich das "destroy" Signal abfange und in einer Funktion dann ".hide_all()" schreibe, zerstört er es trotzdem.
Ich hoffe, es ist einigermaßen verständlich, wie ich es meine
Danke
Widget aus Glade, zerstören, und wieder anzeigen
Das "destroy-event"-Signal ist zu spät, da wird das Widget bereits zerstört. Du musst das "delete-event"-Signal behandeln. Oder, wenn du wirklich ein neues Widget willst, die Glade-Datei noch einmal laden.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
Geht immer noch nicht, muss ich vllt irgendetwas unterbinden?
Ich hätte es jetzt so vor:
Aber so geht es noch nicht.
Ich hätte es jetzt so vor:
Code: Alles auswählen
self.window=self.xml.get_widget("Netzwerktest")
self.window.connect("delete-event", lambda w: self.window.hide_all())
Der Handler muss `True` zurückgeben, damit das Signal nicht weiter verbreitet wird (sonst wird irgendwann ja der Default-Handler aufgerufen, der das Widget zerstört).
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
Hä? ich steh mal wieder ein bisschen auf m Schlauch, so oder was?
^^
edit: Hier habe ich das Problem auch noch mal gesehen http://www.daniweb.com/forums/thread176389.html
genau das ist das Problem, leider hat ihm noch niemand geantwortet
Code: Alles auswählen
self.window=self.xml.get_widget("Netzwerktest")
self.window.connect("delete-event", lambda w: self.window.hide_all() or True)
edit: Hier habe ich das Problem auch noch mal gesehen http://www.daniweb.com/forums/thread176389.html
genau das ist das Problem, leider hat ihm noch niemand geantwortet
Ist es denn so schwer, einfach einmal selber Dinge auszuprobieren oder einen Blick in die Dokumentation zu werfen? Dass man hier Fragen stellt geht ja in Ordnung, man ist ja auch bemüht zu antworten, aber ein klein wenig darf man doch erwarten, dass mitgedacht wird, dass man grundlegende Dinge der Sprache weiß und dass man auch vorgeschlagene Lösungen nicht einfach hinnimmt, sondern dass versucht wird, diese zu verstehen, beispielsweise mit Hilfe der Dokumentation.
Ein Blick in die Dokumentation offenbart dir, dass den Callbacks vom "delete-event"-Signal eben zwei Argumente übergeben werden, nämlich das Widget, das "gelöscht" werden soll und eben das Event, das das Signal ausgelöst hat. Das bringt uns also dazu, dass dein toller Code wohl irgendwie so aussehen muss:
Und mit ``self.window.show_all()`` ist dann alles wieder da. Das war doch jetzt gar nicht so schwer, oder?
Ein Blick in die Dokumentation offenbart dir, dass den Callbacks vom "delete-event"-Signal eben zwei Argumente übergeben werden, nämlich das Widget, das "gelöscht" werden soll und eben das Event, das das Signal ausgelöst hat. Das bringt uns also dazu, dass dein toller Code wohl irgendwie so aussehen muss:
Code: Alles auswählen
self.window = self.xml.get_widget("Netzwerktest")
self.window.connect("delete-event", lambda w, e: self.window.hide_all() or True)
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)