wx.ProgressDialog und EndModal

Plattformunabhängige GUIs mit wxWidgets.
Antworten
IoI
User
Beiträge: 68
Registriert: Dienstag 1. Dezember 2009, 11:39

Hallo,

ich eine Klasse aus wx.ProgressDialog erstellt, die ich Modal aufrufen möchte.

Code: Alles auswählen

class MyProgress(wx.ProgressDialog):
  def __init__(self, parent, name, pd_msg, moreargs):
    wx.ProgressDialog.__init__(self, name,
                                 pd_msg,
                                 maximum=1,
                                 parent=parent,
                                 style=wx.PD_CAN_ABORT | wx.PD_APP_MODAL | wx.PD_ELAPSED_TIME | wx.PD_AUTO_HIDE
                                 #| wx.PD_ESTIMATED_TIME
                                 #| wx.PD_REMAINING_TIME
                            )
    #Hier noch mehr Aktion

    self.timer = wx.Timer(self)
    self.Bind(wx.EVT_TIMER, self.OnPulse)
    self.timer.Start(150, False)
  def OnPulse(self, event):
    keepgoing, skip = self.Pulse()
    if keepgoing:
      #Pseudo keepgoing Block
      if self.testNeeded():
        msg = self.getStatusMsg()
        if msg != self.curmsg:
          self.Update(0, msg)
          self.curmsg = msg
      else:
        self.timer.Stop()
        self.Update(1, "fertig")
        #Hier noch mehr Aktion
        self.EndModal(wx.ID_OK)
    else:
      ##
      #Abbrechen
      ##
      self.timer.Stop()
      #Hier noch mehr Aktion
      self.EndModal(wx.ID_CANCEL)
im Hauptprogramm steht dann

Code: Alles auswählen

      dlg=MyProgress(self,u"Titel", u"Nachricht",someargs)
      if dlg.ShowModal() != wx.ID_OK:
        dlg.Destroy()
        return
      #wenn alles geklappt hat geht es weiter
Wenn man auf Abbrechen klickt soll der Dialog wx.ID_CANCEL zurückgeben. Das klappt unter Linux und Windows XP Home in einer VM, aber nicht unter Windows XP Prof und Windows 7 (nicht virtuell). Dort ist dann der Timer gestoppt, aber der Dialog verschwindet nicht.

Sehr merkwürdig. Was mach ich falsch?
Antworten