Hallo!
Es ist sehr schwierig, ein gutes Beispiel für den ProgressDialog zu erstellen. Ich habe es jetzt schon mehrmals versucht, so ein Beispiel dafür zu erstellen, aber irgendwie wird nichts mit dem "einen", einfachen Beispiel. Man kann diesen Dialog nämlich auf viele verschiedene Arten verwenden. Und jede Art fügt sich in die eigene Art zu programmieren ein. Ein Beispiel, das für meine Art zu programmieren ideal ist, kann für andere Programmierer wieder komplett unbrauchbar sein.
Aber eines bleibt immer gleich:
NIEMALS von einem anderen Thread aus, direkt auf wxPython-GUI-Elemente zugreifen.
Auch wenn es auf einem Computer funktioniert, kann es sein, dass es auf dem gleichen Computer mit einem anderen Servicepack oder einer anderen wxPython-Version schon nicht mehr funktioniert. Dann gibt es noch die Unterschiede zwischen Windows, Linux, Gnome, KDE und Mac. Nur wenn man nicht von einem Thread auf den anderen Thread zugreift, kann man halbwegs sicher sein, dass das Programm sinngemäß funktioniert.
Zur Trennung der Threads gibt es verschiedene Wege. Ein sehr einfacher Weg ist der, dass man threadübergreifende Befehle über
``wx.CallAfter()`` aufruft.
Ein anderer Weg ist der, dass man gezielt kapselt, Events auslöst und Handlerfunktionen an die Events bindet. ``wx.CallAfter()`` macht es im Hintergrund so ähnlich.
Und noch etwas: Ob der Dialog bei 100 verschwindet, hat nichts mit den Threads zu tun. Es gibt eine Einstellung (``wx.PD_AUTO_HIDE``) die genau dieses Verhalten erzwingt. Siehe:
http://docs.wxwidgets.org/stable/wx_wxp ... ialog.html
Wenn der Dialog dann trotzdem nicht verschwindet, dann wurde falsch programmiert. Und das hat dann vielleicht etwas mit Threading zu tun.
Ich versuche jetzt zwei Beispiele für den ProgressDialog mit Worker-Thread zusammen zu bringen. Wenn ich es schaffe, dann schmeiße ich sie in das Codesnippets-Forum.
mfg
Gerold
