import wx

class MyFrame(wx.Frame):
    def __init__(self, parent):
        super(MyFrame, self).__init__(parent)

        self.panel = wx.Panel(self)
        self.miniFrame = MyMiniFrame(self)

        wx.CallLater(3000, self.miniFrame.Show) # Open MiniFrame in 3000ms

    def OnMiniFrameClosed(self):
        """interface for miniframe to tell main window it has closed"""
        wx.CallLater(5000, self.OnReshow)

    def OnReshow(self):
        self.miniFrame = MyMiniFrame(self)
        self.miniFrame.Show()

class MyMiniFrame(wx.MiniFrame):
    def __init__(self, parent):
        super(MyMiniFrame, self).__init__(parent)

        self.panel = wx.Panel(self)
        self.btn = wx.Button(self.panel, label="Close me")
#        self.timer = wx.Timer(self)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.btn)
        self.panel.SetSizer(sizer)

        self.Bind(wx.EVT_BUTTON, self.OnClose, self.btn)
#        self.Bind(wx.EVT_TIMER, self.OnTimer, self.timer)

    def OnClose(self, evt):
        self.Show(False)
#        self.timer.Start(5000, oneShot=True) # Reopen in 5000ms
        self.Parent.OnMiniFrameClosed()
        self.Close()

app = wx.App(False)
f = MyFrame(None)
f.Show()
app.MainLoop()
