2010-01-09 73 views
0

我正在創建一個AuiMDIParent框架,並且在那個父框架中有一個AuiMDIChild框架。在子框架內部,我有一個顯示圖像的面板。我的問題是,當我運行我的代碼(下面給出)時,我得到了所需的結果,但是當我嘗試關閉父窗口的主窗口時,沒有任何反應。然後當我關閉子框架時,整個應用程序關閉,包括父框架(不僅僅是子框架)。wxPython中AuiMDI幀的問題

我不知道爲什麼會發生這種情況。請幫我弄清楚是否有人遇到過這樣的問題。如果你運行我的代碼,你將會對這個問題有一個更好的認識。

謝謝。

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() 

回答

0

它可能是因爲你的孩子框架父對象'None'而不是mdi父框架。