Problem with AuiMDI frames in wxPython
Question: I am creating a AuiMDIParent frame and inside that parent frame I have a
AuiMDIChild Frame. Inside the child frame I have a panel which displays an
image. My problem is that when I run my code (given below) I get the desired
result, but when I try to close the main window that is the parent frame,
nothing happens. Then when I close the child frame entire application is
closed including parent frame (not just the child frame).

I do not know why is this happening. Please help me figure out if any one has
come across such problem. If you run my code you will have a better idea of
the problem.

Thanks.

    
    
    import wx
    import wx.aui
    
    class ParentFrame(wx.aui.AuiMDIParentFrame):
        '''
            This is main frame
        '''
    
        def __init__(self,parent,id,title):
            '''
                Creates a Parent Frame which has child frames into it.
            '''
            wx.aui.AuiMDIParentFrame.__init__(self,parent,id,title,
                                              size=(900,700),
                                              style=wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE)
            self.SetMinSize((500,500))
            self.CreateStatusBar()
    
    class NetworkVisualizationFrame(wx.aui.AuiMDIChildFrame):
        '''
            This is a child frame
        '''
    
        def __init__(self,parent=None,id=-1,title="Network Visualization",image="Default.png"):
            '''
                Creates a child frame inside parent frame.
            '''
            wx.aui.AuiMDIChildFrame.__init__(self,parent,id,title)
            (frameWidth,frameHeight) = self.GetSizeTuple()
    
            #=========================================================
            # Create an image panel
            #=========================================================
            imagePanelHeight = int(frameHeight)
            imagePanelWidth = int(0.7 * frameWidth)
            self.imagePanel = wx.Panel(self,id=-1,name="Image Panel",
                                       style=wx.BORDER_THEME,
                                       size=(imagePanelWidth,imagePanelHeight))
                        self.loadImage(image)
    
            self.Bind(wx.EVT_SIZE, self.onResize)
            self.Bind(wx.EVT_PAINT, self.onPaint)
    
        def loadImage(self,image):
            #==================================================
            # Find the aspect ratio of the image
            #==================================================
            self.png = wx.Image(image, wx.BITMAP_TYPE_PNG)
            imageHeight = self.png.GetHeight()
            imageWidth = self.png.GetWidth()
            self.aspectRatio = imageWidth/imageHeight
            self.bitmap = wx.BitmapFromImage(self.png)
    
        def onResize(self,event):
            (frameWidth,frameHeight) = self.GetSizeTuple()
            imagePanelWidth = int(0.7 * frameWidth)
            imagePanelHeight = int(frameHeight) 
            self.imagePanel.SetSize((imagePanelWidth,imagePanelHeight))
            (w, h) = self.getBestSize()
            self.imagePanel.SetSize((w,h)) 
            self.scaledPNG = self.png.Scale(w, h)
            self.bitmap = wx.BitmapFromImage(self.scaledPNG)
            self.Refresh()
    
        def onPaint(self,event):
            dc = wx.PaintDC(self.imagePanel)
            dc.DrawBitmap(self.bitmap, 0, 0, useMask=False)
    
        def getBestSize(self):
            (w,h) = self.imagePanel.GetSizeTuple()
            # Keep the height same and change width of the image according to aspect ratio
            newWidth = int (self.aspectRatio * h)
            newSize = (newWidth,h)
            return newSize
    
    app = wx.PySimpleApp()
    parentFrame = ParentFrame(None,-1,"Main Frame")
    NetworkVisualizationFrame(parentFrame,-1,"Network Visualization","Artifacts_vs_Elaborations_36855.png")
    parentFrame.Show()
    app.MainLoop()
    


Answer: Its probably because you have the child frame parented to 'None' instead of
the mdi parent frame.

