Seite 1 von 1

wx.TaskBarIcon: Wie sauber beenden?

Verfasst: Freitag 15. Dezember 2006, 09:25
von oliver1974
Hallo,

Ich hab hier (zumindest unter WindowsXP) das Phänomen, dass
ich meine Applikation nicht mehr sauber beendet bekomme,
sobald ein TaskBarIcon läuft.

wenn ich mit
self.tb_icon.RemoveIcon()

("self.tb_icon" sei dabei natürlich das TaskBarIcon)

es entferne, ist es zwar in der TaskBar weg... Aber
beim anschließenden Beenden der Applikation verschwindet zwar das
Hauptfenster, aber der Prozess läuft weiter, wie man sehr
schön sehen kann, wenn man die Applikation von der Kommandozeile
aus startet.. da muss ich erst mit "STRG+C" abwürgen.

Nehme ich das TaskBar Icon wieder raus, geht alles.

self.tb_icon.Destroy() hat übrigens einen netten Absturz von
Python zur Folge, mit einer entsprechenden Windows-Fehlermeldung
(der berühmt berüchtigten Fehler-Benachrichtung an Microsoft..)

Wie geht man denn mit den TaskBarIcons "sauber" um?

Verfasst: Freitag 15. Dezember 2006, 12:20
von Blattlaus
Ich hab hier eine Applikation, ebenfalls mit Taskbaricon, und die macht folgendes:

Code: Alles auswählen

self.NumberWindow.tbicon.RemoveIcon()
self.stop()
self.ExitMainLoop()
sys.exit()
- self ist eine, von wx.App abgeleitete, Klasse
- NumberWindow ist ein Objekt einer, von wx.Frame abgeleiteten, Klasse
- tbicon ist ein wx.TaskBarIcon
- self.stop() stoppt einige zusätzliche Threads

Re: wx.TaskBarIcon: Wie sauber beenden?

Verfasst: Freitag 15. Dezember 2006, 12:32
von gerold
oliver1974 hat geschrieben:Ich hab hier (zumindest unter WindowsXP) das Phänomen, dass ich meine Applikation nicht mehr sauber beendet bekomme, sobald ein TaskBarIcon läuft.
Hi oliver!

Bitte ein funktionierendes Beispiel.

mfg
Gerold
:-)

Verfasst: Freitag 15. Dezember 2006, 13:51
von oliver1974
Hallo,

Also, mit der Vorgehensweise von Blattlaus klappt es!
Danke. Aber auch das muss man erstmal wissen, dass sind
wieder so Sachen... Ich glaube, ich muss mich mal stark
an dem Wiki beteiligen (von wxPython), da gibts wohl
einiges zu schreiben, solche Sachen stehen nicht in der Doku,
soweit ich weiß..

@Gerold:

Den nicht funktionierenden Code schiebe ich bald noch mal nach,
ich habe den Eindruck, du scheinst eher überrascht zu sein, dass das NICHT ging, oder? Hätte es denn deines Erachtens nach so einfach gehen müssen?
Bei mir war ohne den ExitMainLoop() nix zu wollen.. das bedingt natürlich,
dass man Zugriff auf die Applikationsinstanz hat.. Ist ja kein Problem,
aber wäre natürlich schöner ohne den (wen auch sehr kleinen) Zusatzaufwand...

Verfasst: Freitag 15. Dezember 2006, 21:06
von oliver1974
Nochmal ergänzend zum letzten Post..

Das Problem mit den "ExitMainLoop" und Co. ist, dass in "wxPython in Action" von Rappin/Dunn explizit diese Methode als "emergency shutdown"" bezeichnet wird, und als "unsauber" gilt.. Nun ja, ich schau mal nach, ob man das noch irgendwie anders hinkriegt.

Die wxPython - Demo scheint es ja auch ohne die Notbremse hinzukriegen, ich werf noch mal einen Blick drauf.

Verfasst: Freitag 15. Dezember 2006, 21:13
von oliver1974
Das Problem scheint in PySimpleApp() zu liegen... mehr oder minder.

Wenn man eine eigene App-Klasse definiert, und dort in der OnExit()
Methode mittels RemoveIcon() dann das Icon entfernt, klappt das (zumindest unter WindowsXP und Linux) einwandfrei.

(ich wollte das eigentlich als EDIT in den letzten Post reinschreiben, aber irgendwie läuft das Forum bei mir hier unter Linux/Firefox 2.0 überhaupt nicht sauber.. er vergißt laufend meinen Login und lässt mich teilweise nicht die eigenen Posts editieren..)