Can't figure out wx.SplitterWindow

Hello! I'm working on a simple snippet manager, and I need to a horizontal splitter window with a panel in each side. I've been trying various methods and examples for a few hours, but nothing has worked! Could someone please show me how to add a horizontal splitter window to my VBox with two panels? Here is my code:

# START GNOMEcode SCRIPT
import sys
import wx

class gcMainWindow(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(640, 480))

        self.setupBitmaps()

        vbox = wx.BoxSizer(wx.VERTICAL)
        toolbar = wx.ToolBar(self, -1, style=wx.TB_HORIZONTAL | wx.NO_BORDER)
        toolbar.AddSimpleTool(0, self.new_bmp, 'New', '')
        toolbar.AddSimpleTool(1, self.save_bmp, 'Save', '')
        toolbar.AddSimpleTool(2, self.delete_bmp, 'Delete', '')
        toolbar.AddSeparator()
        toolbar.AddSimpleTool(3, self.undo_bmp, 'Undo', '')
        toolbar.AddSimpleTool(4, self.redo_bmp, 'Redo', '')
        toolbar.AddSeparator()
        toolbar.AddSimpleTool(5, self.cut_bmp, 'Cut', '')
        toolbar.AddSimpleTool(6, self.copy_bmp, 'Copy', '')
        toolbar.AddSimpleTool(7, self.paste_bmp, 'Paste', '')
        toolbar.AddSeparator()
        toolbar.AddSimpleTool(8, self.about_bmp, 'About', '')
        toolbar.AddSimpleTool(9, self.quit_bmp, 'Quit', '')
        toolbar.Realize()

        self.setupTBEvents(toolbar)

        vbox.Add(toolbar, 0, wx.EXPAND, 5)
        self.SetSizer(vbox)

    def setupBitmaps(self):
        tsize = (24, 24)
        self.new_bmp = wx.ArtProvider.GetBitmap(wx.ART_NEW, wx.ART_TOOLBAR, tsize)
        self.save_bmp = wx.ArtProvider.GetBitmap(wx.ART_FILE_SAVE, wx.ART_TOOLBAR, tsize)
        self.delete_bmp = wx.ArtProvider.GetBitmap(wx.ART_DELETE, wx.ART_TOOLBAR, tsize)
        self.cut_bmp = wx.ArtProvider.GetBitmap(wx.ART_CUT, wx.ART_TOOLBAR, tsize)
        self.copy_bmp = wx.ArtProvider.GetBitmap(wx.ART_COPY, wx.ART_TOOLBAR, tsize)
        self.paste_bmp = wx.ArtProvider.GetBitmap(wx.ART_PASTE, wx.ART_TOOLBAR, tsize)
        self.undo_bmp = wx.ArtProvider.GetBitmap(wx.ART_UNDO, wx.ART_TOOLBAR, tsize)
        self.redo_bmp = wx.ArtProvider.GetBitmap(wx.ART_REDO, wx.ART_TOOLBAR, tsize)
        self.about_bmp = wx.ArtProvider.GetBitmap(wx.ART_INFORMATION, wx.ART_TOOLBAR, tsize)
        self.quit_bmp = wx.ArtProvider.GetBitmap(wx.ART_QUIT, wx.ART_TOOLBAR, tsize)

    def setupTBEvents(self, tb):
        for i in range(10):
            wx.EVT_TOOL(tb, i, self.ToolbarEvent)

    def ToolbarEvent(self, event):
        if event.GetId() == 0:
            print "New"
        elif event.GetId() == 1:
            print "Save"
        elif event.GetId() == 2:
            print "Delete"
        elif event.GetId() == 3:
            print "Undo"
        elif event.GetId() == 4:
            print "Redo"
        elif event.GetId() == 5:
            print "Cut"
        elif event.GetId() == 6:
            print "Copy"
        elif event.GetId() == 7:
            print "Paste"
        elif event.GetId() == 8:
            print "About"
        elif event.GetId() == 9:
            sys.exit()

class GNOMEcode(wx.App):
    def OnInit(self):
        frame = gcMainWindow(None, -1, 'GNOMEcode')
        frame.SetIcon(wx.Icon('icon.png', wx.BITMAP_TYPE_PNG))
        frame.Show(True)
        return True

app = GNOMEcode(0)
app.MainLoop()
#END GNOMEcode SCRIPT

Thank you in advance!

-David

This should work. I tried commenting things to help you, but some indentation came out strangely. The controls that you initialize with the panels as parents must be added to the corresponding sizers. Splitters gave me a splitting headache when I was figuring them out.

START GNOMEcode SCRIPT

import sys
import wx

class gcMainWindow(wx.Frame):
def init(self, parent, id, title):
wx.Frame.init(self, parent, id, title, wx.DefaultPosition,
wx.Size
(640, 480))

   self.setupBitmaps()

# Splitter
   self.splitter = wx.SplitterWindow(self,
                 style = wx.SP_LIVE_UPDATE | wx.SP_3DSASH)
   self.splitter.SetMinimumPaneSize

(20)

   vbox = wx.BoxSizer(wx.VERTICAL)
   toolbar = self.CreateToolBar()
   toolbar.AddSimpleTool(0,  self.new_bmp,    'New',    '')
   toolbar.AddSimpleTool(1,  self.save_bmp,   'Save',   '')

   toolbar.AddSimpleTool(2,  self.delete_bmp, 'Delete', '')
   toolbar.AddSeparator()
   toolbar.AddSimpleTool(3,  self.undo_bmp,   'Undo',   '')
   toolbar.AddSimpleTool(4,  self.redo_bmp,   'Redo',   '')

   toolbar.AddSeparator()
   toolbar.AddSimpleTool(5,  self.cut_bmp,    'Cut',    '')
   toolbar.AddSimpleTool(6,  self.copy_bmp,   'Copy',   '')
   toolbar.AddSimpleTool(7,  self.paste_bmp,  'Paste',  '')

   toolbar.AddSeparator()
   toolbar.AddSimpleTool(8,  self.about_bmp,  'About',  '')
   toolbar.AddSimpleTool(9, self.quit_bmp,    'Quit',   '')
   toolbar.Realize()

   self.setupTBEvents

(toolbar)

   #Left panel
   self.lpanel = wx.Panel(self.splitter, wx.NewId(), style=wx.SUNKEN_BORDER)
   # Initialize controls with self.lpanel as parent
   self.rpanel = wx.Panel(self.splitter

, wx.NewId(), style=wx.SUNKEN_BORDER)
# Initialize controls with self.rpanel as parent

   #Left sizer
   self.lbox = wx.BoxSizer(wx.VERTICAL)
   # Add the above controls to left sizer
   self.lpanel.SetSizer(self.lbox)

   #Right sizer
   self.rbox = wx.BoxSizer(wx.VERTICAL)
   # Add the above controls to right sizer
   self.rpanel.SetSizer(self.rbox)

   # Split the window

   sashposition = 200
   self.splitter.SplitVertically(self.lpanel, self.rpanel,
                sashposition)

def setupBitmaps(self):
tsize = (24, 24)
self.new_bmp = wx.ArtProvider.GetBitmap(wx.ART_NEW,
wx.ART_TOOLBAR, tsize)
self.save_bmp = wx.ArtProvider.GetBitmap(wx.ART_FILE_SAVE,
wx.ART_TOOLBAR, tsize)
self.delete_bmp = wx.ArtProvider.GetBitmap(wx.ART_DELETE

···

,
wx.ART_TOOLBAR, tsize)
self.cut_bmp = wx.ArtProvider.GetBitmap(wx.ART_CUT,
wx.ART_TOOLBAR, tsize)
self.copy_bmp = wx.ArtProvider.GetBitmap(wx.ART_COPY,
wx.ART_TOOLBAR, tsize)
self.paste_bmp = wx.ArtProvider.GetBitmap(wx.ART_PASTE,
wx.ART_TOOLBAR, tsize)
self.undo_bmp = wx.ArtProvider.GetBitmap(wx.ART_UNDO,
wx.ART_TOOLBAR, tsize)
self.redo_bmp = wx.ArtProvider.GetBitmap
(wx.ART_REDO,
wx.ART_TOOLBAR, tsize)
self.about_bmp = wx.ArtProvider.GetBitmap(wx.ART_INFORMATION,
wx.ART_TOOLBAR, tsize)
self.quit_bmp = wx.ArtProvider.GetBitmap(wx.ART_QUIT,
wx.ART_TOOLBAR
, tsize)

def setupTBEvents(self, tb):
for i in range(10):
wx.EVT_TOOL(tb, i, self.ToolbarEvent)

def ToolbarEvent(self, event):
if event.GetId() == 0:
print “New”

   elif event.GetId() == 1:
       print "Save"
   elif event.GetId() == 2:
       print "Delete"
   elif event.GetId() == 3:
       print "Undo"
   elif event.GetId() == 4:
       print "Redo"
   elif event.GetId() == 5:
       print "Cut"
   elif event.GetId() == 6:
       print "Copy"
   elif event.GetId() == 7:
       print "Paste"
   elif event.GetId() == 8:
       print "About"
   elif event.GetId() == 9:
       sys.exit()

class GNOMEcode(wx.App):

def OnInit(self):
frame = gcMainWindow(None, -1, ‘GNOMEcode’)
frame.SetIcon(wx.Icon(‘icon.png’, wx.BITMAP_TYPE_PNG))
frame.Show(True)
return True

app = GNOMEcode(0)
app.MainLoop()
#END GNOMEcode SCRIPT

Have fun,
Saketh

Thank you very much! It worked perfectly.

- David

···

This should work. I tried commenting things to help you, but some indentation came out strangely. The controls that you initialize with the panels as parents must be added to the corresponding sizers. Splitters gave me a splitting headache when I was figuring them out.

*** code removed to save space ***

Have fun,
Saketh