multiple document interface

My following code is not giving me child window,i think there is some problem in OnNew ( self, event ) .Can anybody help

import wx
from wxPython.wx import *

class MyFrame(wxMDIParentFrame):
def init(self):
wxMDIParentFrame.init(self, None,-1, “My Frame”,size= (500, 500))

    menubar = wx.MenuBar()
    file = wx.Menu()
    help = wx.Menu()
   
    open = wx.MenuItem(file, 101, '&Open\tCtrl+O', 'Open file')
    file.AppendItem(open)
    close = wx.MenuItem(file, 102, '&close\tCtrl+W', 'Close file')
    file.AppendItem(close)
    file.AppendSeparator()
    quit = wx.MenuItem(file, 105, '&Quit\tCtrl+Q', 'Quit the Application')
   
    file.AppendItem(quit)
    help.Append(201,'&About...','About this program..')
    help.Append(202,'&Help','help for this program ')
    menubar.Append(file, '&File')

    menubar.Append(help, '&Help')
    self.SetMenuBar(menubar)
    self.Centre()
    self.Bind(wx.EVT_MENU, self.OnQuit, id=105)

    vbox = wx.BoxSizer(wx.VERTICAL)
    hbox = wx.BoxSizer(wx.HORIZONTAL)
    toolbar = wx.ToolBar(self, 0, style=wx.TB_HORIZONTAL | wx.NO_BORDER)

    toolbar.AddSimpleTool(1,

wx.Image(‘open.png’, wx.BITMAP_TYPE_PNG).ConvertToBitmap(), ‘Open’, ‘’)
toolbar.AddSeparator()
toolbar.AddSimpleTool(2,
wx.Image(‘quit2.jpeg’, wx.BITMAP_TYPE_JPEG).ConvertToBitmap(), ‘Quit’,
‘’)
toolbar.AddSeparator()
toolbar.AddSimpleTool(3,
wx.Image(‘exit2.jpeg’, wx.BITMAP_TYPE_JPEG).ConvertToBitmap(), ‘Exit’,
‘’)
toolbar.AddSeparator()
toolbar.AddSimpleTool(4,
wx.Image(‘help.png’, wx.BITMAP_TYPE_PNG).ConvertToBitmap(), ‘Help’, ‘’)
toolbar.Realize()
vbox.Add(toolbar, 0, border=4)
self.SetSizer(vbox)
self.statusbar = self.CreateStatusBar()
self.Centre()
self.Bind(wx.EVT_TOOL, self.OnClose, id=2)
self.Bind(wx.EVT_TOOL, self.OnOpen, id=1)
self.Bind(wx.EVT_TOOL, self.OnHelp, id=4)
self.Bind(wx.EVT_TOOL, self.OnQuit, id=3)

    self.Bind(wx.EVT_MENU, self.OnNew, id=101)
    self.Show ( True )



def OnNew ( self, event ):
  
  # Create a child window

  child = wxMDIChildFrame ( self, -1, 'MDI Child' )

  # Give the child a panel

  child.panel = wxPanel ( child, -1 )

  child.panel.SetSize(child.GetClientSize() )

  # Add a label

  child.label = wxStaticText ( child, -1, '  I am only a child.' )
  child.Show ( True )
 

def OnClose(self, event):
    self.Close()

def OnHelp(self, event):
    self.statusbar.SetStatusText('Help Command')

def OnQuit(self, event):
    self.Close()

def OnOpen(self, event):
    self.statusbar.SetStatusText('Open Command')

app=wxPySimpleApp()
MyFrame()
app.MainLoop()

···


ANURAG SHARMA

anurag sharma wrote:

My following code is not giving me child window,i think there is some problem in OnNew ( self, event ) .Can anybody help

import wx
from wxPython.wx import *

First, don't use both of these import styles. Just use "import wx" and use the wx. prefix on all the wx names.

Secondly, always mention which platform and version you are using.

class MyFrame(wxMDIParentFrame):
    def __init__(self):
        wxMDIParentFrame.__init__(self, None,-1, "My Frame",size= (500, 500))

        menubar = wx.MenuBar()
        file = wx.Menu()
        help = wx.Menu()
               open = wx.MenuItem(file, 101, '&Open\tCtrl+O', 'Open file')
        file.AppendItem(open)
        close = wx.MenuItem(file, 102, '&close\tCtrl+W', 'Close file')
        file.AppendItem(close)
        file.AppendSeparator()
        quit = wx.MenuItem(file, 105, '&Quit\tCtrl+Q', 'Quit the Application')
               file.AppendItem(quit)
        help.Append(201,'&About...','About this program..')
        help.Append(202,'&Help','help for this program ')
        menubar.Append(file, '&File')

        menubar.Append(help, '&Help')
        self.SetMenuBar(menubar)
        self.Centre()
        self.Bind(wx.EVT_MENU, self.OnQuit, id=105)

        vbox = wx.BoxSizer(wx.VERTICAL)
        hbox = wx.BoxSizer(wx.HORIZONTAL)
        toolbar = wx.ToolBar(self, 0, style=wx.TB_HORIZONTAL | wx.NO_BORDER)

        toolbar.AddSimpleTool(1, wx.Image('open.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'Open', '')
        toolbar.AddSeparator()
        toolbar.AddSimpleTool(2, wx.Image('quit2.jpeg', wx.BITMAP_TYPE_JPEG).ConvertToBitmap(), 'Quit', '')
        toolbar.AddSeparator()
        toolbar.AddSimpleTool(3, wx.Image('exit2.jpeg', wx.BITMAP_TYPE_JPEG).ConvertToBitmap(), 'Exit', '')
        toolbar.AddSeparator()
        toolbar.AddSimpleTool(4, wx.Image('help.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'Help', '')
        toolbar.Realize()
        vbox.Add(toolbar, 0, border=4)
        self.SetSizer(vbox)

Third, don't use a sizer on the MDI parent frame. It will already handle the layout of the children as needed for each platform's mdi implementation. For the layout of the toolbar just use self.SetToolBar instead of managing its layout yourself or with a sizer.

        self.statusbar = self.CreateStatusBar()
        self.Centre()
        self.Bind(wx.EVT_TOOL, self.OnClose, id=2)
        self.Bind(wx.EVT_TOOL, self.OnOpen, id=1)
        self.Bind(wx.EVT_TOOL, self.OnHelp, id=4)
        self.Bind(wx.EVT_TOOL, self.OnQuit, id=3)
      
               self.Bind(wx.EVT_MENU, self.OnNew, id=101)
        self.Show ( True )

    def OnNew ( self, event ):
            # Create a child window

      child = wxMDIChildFrame ( self, -1, 'MDI Child' )

      # Give the child a panel

      child.panel = wxPanel ( child, -1 )

      child.panel.SetSize(child.GetClientSize() )

There's no need for this, the child frame will manage the size itself if the panel is the only child, or if you use a sizer.

      # Add a label

      child.label = wxStaticText ( child, -1, ' I am only a child.' )

You probably want to use child.panel for the parent.

···

      child.Show ( True )
     
    def OnClose(self, event):
        self.Close()

    def OnHelp(self, event):
        self.statusbar.SetStatusText('Help Command')

    def OnQuit(self, event):
        self.Close()

    def OnOpen(self, event):
        self.statusbar.SetStatusText('Open Command')

app=wxPySimpleApp()
MyFrame()
app.MainLoop()

--
ANURAG SHARMA

--
Robin Dunn
Software Craftsman
http://wxPython.org Java give you jitters? Relax with wxPython!