import wx class ErrorDialog(wx.Dialog): def __init__(self, message, size=wx.DefaultSize, pos=wx.DefaultPosition, style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER): pre = wx.PreDialog() pre.Create(None, -1, 'Error', pos, size, style) self.this = pre.this sizer = wx.BoxSizer(wx.VERTICAL) text = wx.TextCtrl(self, -1, message, wx.DefaultPosition, [300,150], style=wx.TE_MULTILINE|wx.TE_READONLY) sizer.Add(text, 1, wx.GROW|wx.ALIGN_CENTRE|wx.ALL, 5) box = wx.BoxSizer(wx.HORIZONTAL) btn = wx.Button(self, wx.ID_OK, u' OK ') box.Add(btn, 0, wx.ALIGN_CENTRE|wx.ALL, 5) sizer.Add(box, 0, wx.ALIGN_RIGHT|wx.ALL, 5) self.SetSizer(sizer) self.SetAutoLayout(True) sizer.Fit(self) self.Center() self.progress = 0 self.timeout = 1000 self.timer = wx.Timer(self, 0) self.Bind(wx.EVT_TIMER, self.OnTimer, self.timer) self.timer.Start(250) def OnTimer(self, evt): self.progress += 250 if self.progress >= self.timeout: return self.OnClose(1) def OnClose(self, evt): self.EndModal(True) self.Destroy() if self.progress >= self.timeout: self.timer.Stop() d = ClosingDialog("Timed Dialog") d.ShowModal() class ClosingDialog(wx.Dialog): def __init__(self, message, size=wx.DefaultSize, pos=wx.DefaultPosition, style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER): pre = wx.PreDialog() pre.Create(None, -1, 'Closing', pos, size, style) self.this = pre.this sizer = wx.BoxSizer(wx.VERTICAL) text = wx.TextCtrl(self, -1, message, wx.DefaultPosition, [600,300], style=wx.TE_MULTILINE|wx.TE_READONLY) sizer.Add(text, 1, wx.GROW|wx.ALIGN_CENTRE|wx.ALL, 5) box = wx.BoxSizer(wx.HORIZONTAL) btn = wx.Button(self, wx.ID_OK, u' OK ') box.Add(btn, 0, wx.ALIGN_CENTRE|wx.ALL, 5) sizer.Add(box, 0, wx.ALIGN_RIGHT|wx.ALL, 5) self.SetSizer(sizer) self.SetAutoLayout(True) sizer.Fit(self) self.Center() app = wx.PySimpleApp() d = ErrorDialog("Hello World!") d.ShowModal()