Я создаю фрейм AuiMDIParent, и внутри этого родительского фрейма у меня есть фрейм AuiMDIChild. Внутри дочернего фрейма у меня есть панель, которая отображает изображение. Моя проблема в том, что когда я запускаю свой код (приведенный ниже), я получаю желаемый результат, но когда я пытаюсь закрыть главное окно, которое является родительским фреймом, ничего не происходит. Затем, когда я закрываю дочерний фрейм, все приложение закрывается, включая родительский фрейм (а не только дочерний фрейм).
Я не знаю, почему это происходит. Помогите пожалуйста разобраться может кто сталкивался с такой проблемой. Если вы запустите мой код, вы лучше поймете проблему.
Спасибо.
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()