import wx
from copy import deepcopy

class MainFrame(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, id=-1, parent=parent, size=wx.Size(600, 500),
                          title='Test')

        self.minimized = False

        self.panel = wx.Panel(self, id=-1, pos=(200, 300))
        self.button = wx.Button(self.panel, id=-1, label='button',
                                 pos=wx.Point(20, 56), size=wx.Size(87, 28))
        self.button.Bind(wx.EVT_BUTTON, self.OnButton, id=-1)

        self.subframes = [MyFrame(self, f'frame{i}') for i in range(1, 4)]

        self.Bind(wx.EVT_ICONIZE, self.OnMinimize)

        funcList = [self.OnSetFocus1, self.OnSetFocus2, self.OnSetFocus3]
        for i in range(0, 3):
            self.subframes[i].Bind(wx.EVT_SET_FOCUS, funcList[i])

        self.orderList = []
        self.forbidFlag = False

    def OnMinimize(self, event):
        if self.IsIconized():
            self.forbidFlag = True
            print('minimized: %s' % self.orderList)
            for f in self.orderList:
                frame = self.subframes[f - 1]
                frame.Hide()
        else:
            print('restored: %s' % self.orderList)
            fList = deepcopy(self.orderList)
            for f in fList:
                frame = self.subframes[f - 1]
                frame.Iconize(False)
                frame.Show()
                frame.Raise()
                print(frame.Label)
            self.forbidFlag = False

    def OnButton(self, event):
        for f in self.subframes:
            f.Show()

        event.Skip()

    def OnSetFocus1(self, event):
        if self.forbidFlag:
            return

        print('1 is set focus')
        if 1 in self.orderList:
            index = self.orderList.index(1)
            del self.orderList[index]
        self.orderList.append(1)

    def OnSetFocus2(self, event):
        if self.forbidFlag:
            return

        print('2 is set focus')
        if 2 in self.orderList:
            index = self.orderList.index(2)
            del self.orderList[index]
        self.orderList.append(2)

    def OnSetFocus3(self, event):
        if self.forbidFlag:
            return

        print('3 is set focus')
        if 3 in self.orderList:
            index = self.orderList.index(3)
            del self.orderList[index]
        self.orderList.append(3)


class MyFrame(wx.Frame):
    def __init__(self, parent, title):
        style = wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | \
                wx.MINIMIZE_BOX | wx.FRAME_NO_TASKBAR | wx.FRAME_FLOAT_ON_PARENT
        wx.Frame.__init__(self, id=-1, parent=parent, size=wx.Size(300, 200),
                          title=title, style=style)

if __name__ == '__main__':
    app = wx.App()
    frame = MainFrame(None)
    frame.Show()
    app.MainLoop()