title: wxpython: How can I fill a Notebook tab with a grid created elsewhere?
body: <p>Right now I have a GUI built from wxpython that successfully pulls data from a .csv, populates a wx grid object, and then displays it in a new frame.  I have also successfully got my main window to display some information in the notebook style.  My goal is to make it so that when I run my program, one of the main page tabs contains the same populated grid as the window I previously made. The issue that keeps stumping me is that the grid creation and grid population (two separate things) are done in different classes in a different (but imported) local file.  Additionally, the below code in my program context gives the AttributeError: 'TabPanel' object has no attribute 'con', which makes sense, but I don't </p>
  
  <p>Is this not possible or is there something I am missing (and am I even being clear?)?  Below is what I would guess would be relevant code.  (Incorrect spacing for class and constructor lines just for convenience here.)  Thank you very much!</p>
  
  <p>Tab/Notebook:</p>
  
  <pre><code>class TabPanel(wx.Panel):    
      def __init__(self, parent):
          wx.Panel.__init__(self, parent=parent, id=wx.ID_ANY)
  
          self.sizer = wx.BoxSizer(wx.VERTICAL)
          txtOne = wx.Panel(Employee.EmployeeViewAllFrame(self).show())
  
          self.sizer.Add(txtOne, 0, wx.ALL , 50)
  
          self.SetSizer(self.sizer)
  
  
  class NotebookDemo(wx.Notebook):
      def __init__(self, parent):
          wx.Notebook.__init__(self, parent, id=wx.ID_ANY, style=
                           wx.BK_DEFAULT
                           #wx.BK_TOP 
                           #wx.BK_BOTTOM
                           #wx.BK_LEFT
                           #wx.BK_RIGHT
                           )
  
          # Create the first tab and add it to the notebook
          tabOne = TabPanel(self)
          tabOne.SetBackgroundColour("BLUE")
          self.AddPage(tabOne, "Main")
  
          # Create and add the second tab
          tabTwo = TabPanel(self)
          self.AddPage(tabTwo, "Employees")
  
          # Create and add the third tab
          self.AddPage(TabPanel(self), "Tasks")
  </code></pre>
  
  <p>Grid/Frame:</p>
  
  <pre><code>class empGrid(wx.grid.Grid):
      def __init__(self, parent):
          wx.grid.Grid.__init__(self,parent,size = (1500,1000))
          self.SetDefaultCellOverflow(False)
          self.EnableEditing(False)
          self.EnableDragGridSize(False)
          self.EnableDragRowSize(False)
          self.EnableDragColSize(False)
          self.grid = gridlib.Grid(panel2)
          self.CreateGrid(TOTALEMPLOYEES, 12)
          self.SetColLabelValue(0, "Name")
  
          self.SetColSize(0, 200)
          self.SetColLabelValue(1, "Grade")
          self.SetColLabelValue(2, "NGID")
          self.SetColLabelValue(3, "MyID")
          self.SetColLabelValue(4, "Skillset1")
          self.SetColSize(4, 110)
          self.SetColLabelValue(5, "Skillset2")
          self.SetColSize(5, 110)
          self.SetColLabelValue(6, "SME")
          self.SetColLabelValue(7, "Org")
          self.SetColLabelValue(8, "Manager")
          self.SetColSize(8, 125)
          self.SetColLabelValue(9, "OfficePriority")
          self.SetColSize(9, 165)
          self.SetColLabelValue(10, "Comments")
          self.SetColSize(10, 200)
          self.SetColLabelValue(11, "Loan?")
          #self.AutoSizeColumns(setAsMin=True)
  
  
  class EmployeeViewAllFrame(wx.Frame): 
    def __init__(self, parent):
      wx.Frame.__init__(self, parent,title = 'View All Employees',size=(wx.EXPAND,wx.EXPAND))
      self.currentid = ''
      self.currentrow = 0
      self.parent = parent
      #Declare all panels
      self.panelMain = wx.Panel(self,size = (1500, 1000)) 
      self.panelSide = wx.Panel(self,size = (wx.EXPAND, 1000)) 
      #self.panelTitle = wx.Panel(self,size = (1000,30))      
      #self.buttonPanel = wx.Panel(self)  
  
      self.buttonExit = wx.Button(self.panelSide, label="exit")
      self.buttonExit.Bind(wx.EVT_BUTTON, self.OnExitButton)
  
      cur = self.parent.con.cursor()
      cur.execute("SELECT * FROM " + EMPLOYEETABLE + " ORDER BY Name;")
      self.rows = cur.fetchall()#Load all the employees into self.rows and organize by name
  
      self.employeenumber = len(self.rows) #Going to be the fetched number from the database
      global TOTALEMPLOYEES 
      TOTALEMPLOYEES = self.employeenumber
  
      #Set up all the column panels and place into an array to be modified
      #self.empGrid = empGrid(self.panelMain)
      self.empGrid = empGrid(EMP.MainWindow.panel2)
      for i in xrange (0, TOTALEMPLOYEES):
          self.empGrid.SetRowLabelValue(i, str(i+1))
          for j in xrange (0,12):
              self.empGrid.SetCellValue(i, j, str(self.rows[i][j]))
              if i % 2 == 1:#if it is odd, change the color to make it easier on the eyes
                  self.empGrid.SetCellBackgroundColour(i, j, 'LIGHT BLUE') #JTEST
  
      self.empGrid.Bind(wx.grid.EVT_GRID_CELL_LEFT_DCLICK, self.OnGridDoubleClick)
      self.empGrid.Bind(wx.grid.EVT_GRID_CELL_RIGHT_DCLICK, self.OnGridDoubleClickRight)
  
      #Now do the same thing for the buttons
      text = wx.StaticText(self.panelSide, label = "Double left click an employee to modify fields\n\n\n  Double right click an employee to add a new employee task" , size = (wx.EXPAND,400))        
      sideSizer = wx.BoxSizer(wx.VERTICAL)        
      sideSizer.Add(text)
      sideSizer.Add(self.buttonExit)
      self.panelSide.SetSizer(sideSizer)
      self.panelSide.Layout()
  
  
      #Put them all together then display
      displayEmployeeSizer = wx.BoxSizer(wx.VERTICAL)
      displayEmployeeSizer.Add(self.empGrid) #JGRID
      self.panelMain.SetSizer(displayEmployeeSizer)
      self.panelMain.Layout() 
  
      viewEmployeeSizer = wx.BoxSizer(wx.HORIZONTAL)
      #viewEmployeeSizer.Add(self.panelTitle,proportion=0)
      viewEmployeeSizer.Add(self.panelMain,proportion=0)
      viewEmployeeSizer.Add(self.panelSide,proportion = 0)
      #viewEmployeeSizer.Add(self.buttonPanel, proportion=0, flag = wx.ALIGN_CENTER_HORIZONTAL)
      #viewEmployeeSizer.Add(self.buttonExit, proportion = 0, flag = wx.ALIGN_CENTER_HORIZONTAL)
  
      self.SetSizer(viewEmployeeSizer) #Set the panel size
      #self.buttonPanel.Layout()        
      self.Layout()
      self.Show()
  </code></pre>