Thread + MessageDialog bzw Dialog Problem

Plattformunabhängige GUIs mit wxWidgets.
Antworten
m0ps1234
User
Beiträge: 40
Registriert: Freitag 13. März 2009, 08:57

Dienstag 24. März 2009, 11:50

Hallo,
habe folgendes Problem und weiß nicht weiter:
Ich habe einen Thread, der Methoden abarbeitet.
Die Run-Methode des Threads sieht so aus:

Code: Alles auswählen

def __Run(self): 
        try:
            self.__irgendeineMethode()
            self.__createD() #bzw self.__createMD

        except Exception, e:
            print e
Die Methoden __createD() und __createMD() erstellen ein wx.Dialog und ein wx.MessageDialog (nur Beispiele - Aber Fehler[unten beschrieben] entsteht trotzdem):

Code: Alles auswählen

def __createD(self):
    w = wx.Dialog(self.panel, -1, "test", (50,50), (200,200))
    w.ShowModal()
    w.Destroy()

Code: Alles auswählen

def __createMD(self):
    w = wx.MessageDialog(self.panel, "bla", "blablablup", wx.OK | wx.ICON_INFORMATION)
    w.ShowModal()
    w.Destroy()
Jedoch wird bei mir nur der MessageDialog angezeigt, wenn ich den Thread mit der __createMD() laufen lasse.
Lasse ich den Thread mit __createD() laufen, blitzt der Dialog nur ganz kurz auf und das Programm beendet sich o.O. Eine Fehlermeldung zeigt er nicht. Eigentlich müsste er wegen ShowModal() doch auf eine Antwort von mir warten, oder?

Grüße
Matthias
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Dienstag 24. März 2009, 14:46

Gibst Du denn die Möglichkeit zu antworten? ;-)

Ohne ein Ok-Button (oder eine vergleichbare Instanz) gibt es keine Möglichkeit für wx zu erkennen worauf es warten soll.

Gruß,
Christian
m0ps1234
User
Beiträge: 40
Registriert: Freitag 13. März 2009, 08:57

Dienstag 24. März 2009, 15:02

Als ich Dialog "außerhalb" des Threads getestet habe, also im Mainthread, erstellte sich das Fenster trotzdem und ich konnte nur durch klick auf Beenden oben in der Ecke weiterarbeiten. Also daran kanns doch nicht liegen, oder?

Außerdem hatte ich es auch mal mit dem Fenster aus der wxPython-Demo probiert. Da war es das gleiche Problem: Programm schloss sich einfach.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Dienstag 24. März 2009, 15:21

Nein, Du hast recht - sorry, ich habe jetzt erst den Code aufmerksamer gelesen. Dennoch, versuche mal dem Dialog einen Button zu geben und zu fragen:

Code: Alles auswählen

if w.ShowModal() == wx.ID_OK:
    irgendwas
Hat das einen Effekt? Ist ein bißchen ins Blaue ...

Gruß,
Christian
m0ps1234
User
Beiträge: 40
Registriert: Freitag 13. März 2009, 08:57

Dienstag 24. März 2009, 15:24

Ne, leider funktioniert auch das nicht.
Antworten