> The panels need to have the frame as their parent unless their is
> another widget inbetween.
I thought that's what I did, but I still have something wrong.
Here are two files, the Frame (beta.mainframe.py) and the "Panel" (MySQLPanel.py) and a notebook just for fun.
I would like to use the model for coding as it makes it very easy to read and debug, my other app was 4000 lines of crap.
Thanks for helping,
Scott
----------------------------------------------
beta.mainframe.py
import wx
# gui py files
##from cardbuilder import *
##from gridbuilder import *
from sqlbuilder import * #MySQLPanel
#---------------------------------------------------------------------------
class MainFrame(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, -1, title, size = (950, 720),
style=wx.DEFAULT_FRAME_STYLE
> wx.NO_FULL_REPAINT_ON_RESIZE)
self.SetMinSize((640,480))
self.Centre(wx.BOTH)
# # #----------------------------
####GUI PANELS
# # # ---------------------------
# Add a sizer to the Frame, -> parent and 2 childre
appSizer_1 = wx.FlexGridSizer(2, 1, 1, 1)
# sql sizer
topsizer = wx.BoxSizer(wx.VERTICAL)
# notebook sizer
botsizer = wx.BoxSizer(wx.VERTICAL)
# Make the notebook & pages
nb = wx.Notebook(self, -1, style=0)
# add the py files classes as the Notebook Panels
nb_pg1 = wx.Panel(nb) # Grid(nb)
nb_pg2 = wx.Panel(nb) # Card(nb)
nb_pg1.SetBackgroundColour(wx.RED)
nb_pg2.SetBackgroundColour(wx.CYAN)
# add pages to nb
nb.AddPage(nb_pg1, "Database")
nb.AddPage(nb_pg2, "Card Data")
# add notebook
botsizer.Add(nb, 1, wx.ALL|wx.EXPAND, 0)
# add Top Box
self.sqlPanel = MySQLPanel(self)
topsizer.Add(self.sqlPanel, 0, wx.ALL|wx.EXPAND, 0)
# add children sizers to the parent sizer
appSizer_1.Add(topsizer, 0, wx.ALL|wx.EXPAND, 0)
appSizer_1.Add(botsizer, 0, wx.ALL|wx.EXPAND, 0)
# make it
self.SetAutoLayout(True)
self.SetSizer(appSizer_1)
appSizer_1.AddGrowableRow(1)
appSizer_1.AddGrowableCol(0)
self.Layout()
#---Button events - Upper panel
# These buttons are located on the upper panel
# mySQLPanel
#self.Bind(wx.EVT_BUTTON, self.onAddDispatchers, self.btnDisp) #
#self.Bind(wx.EVT_BUTTON, self.onAddData, self.sql.btnAddData) #
#self.Bind(wx.EVT_BUTTON, self.onRunSQL, self.sql.btnSQL) #
#---------------------------------------------------------
class MyApp(wx.App):
def OnInit(self):
frame = MainFrame(None, "Test")
frame.Show(True)
self.SetTopWindow(frame)
return True
def main():
app = MyApp(False)
app.MainLoop()
if __name__ == '__main__':
main()
#### END
-------------------------------------------------------------------------
MySQLPanel.py
import sys
import wx
# my Frame is for testing
class MyFrame(wx.Frame):
def __init__(self, parent, ID, title):
wx.Frame.__init__(self, parent, ID, title, size = (800, 600),
style=wx.DEFAULT_FRAME_STYLE
> wx.CLIP_CHILDREN
> wx.NO_FULL_REPAINT_ON_RESIZE)
# Parent Box
mbox = wx.BoxSizer(wx.VERTICAL)
# Add Panels...
mbox.Add(MySQLPanel(self), 0, wx.ALL|wx.EXPAND, 0)
self.SetAutoLayout(True)
self.SetSizer(mbox)
self.Layout()
# WORKING CODE !!!!!
class MySQLPanel(wx.Panel):
""" A panel """
def __init__(self, parent):
wx.Panel.__init__(self, parent, -1,
style=wx.SUNKEN_BORDER
> wx.CLIP_CHILDREN
> wx.NO_FULL_REPAINT_ON_RESIZE)
scrPanel1 = wx.ScrolledWindow(self,-1, size=(-1,-1))#, style=wx.SUNKEN_BORDER|wx.FULL_REPAINT_ON_RESIZE)
scrPanel1.SetScrollRate(10, 10)
pbox = wx.BoxSizer(wx.VERTICAL)
cbox = wx.BoxSizer(wx.VERTICAL)
# Add subPanels Classes
pnl1 = subPanel_SQL(scrPanel1)
cbox.Add(pnl1, 0, wx.ALL|wx.EXPAND)
scrPanel1.SetAutoLayout(True)
scrPanel1.SetSizer(cbox)
pbox.Add(scrPanel1, 0, wx.ALL|wx.EXPAND, 0)
self.SetAutoLayout(True)
self.SetSizer(pbox)
self.Layout()
class subPanel_SQL(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent, -1,
style=wx.CLIP_CHILDREN
> wx.NO_FULL_REPAINT_ON_RESIZE)
# Parent
mainSizer = wx.BoxSizer(wx.HORIZONTAL)
# Child
pGridSizer = wx.GridBagSizer(3,3)
cGridSizerAa = wx.FlexGridSizer(1, 7, 2, 2) # bottom buttons
# Widgets
self.labelSQL_1 = wx.StaticText(self, -1, "DataBase ::",
style=wx.ALIGN_RIGHT)
self.labelSQL_2 = wx.StaticText(self, -1, "None selected.")
self.labelSQL_3 = wx.StaticText(self, -1, "Size ::",
style=wx.ALIGN_RIGHT)
self.labelSQL_4 = wx.StaticText(self, -1, "0.0 KB")
self.labelSQL_5 = wx.StaticText(self, -1, "Enter SQL ::",
style=wx.ALIGN_RIGHT)
self.tc_SQL = wx.TextCtrl(self, -1, "Enter SQL here",
style=wx.TE_MULTILINE)
self.tc_Homy = wx.TextCtrl(self, -1, "20", (-1, -1),
style=wx.TE_PROCESS_ENTER
> wx.TE_CENTRE)
self.btnSQL = wx.Button(self, -1, "Run Query")
self.btnAddData = wx.Button(self, -1, "Add Calls")
self.btnDisp = wx.Button(self, -1, "Add Dispatchers")
self.btnSpare = wx.Button(self, -1, "something")
self.btnSaveSQL = wx.Button(self, -1, "Save Query")
#self.btnCommit = wx.Button(self.panel_1, -1, "Commit Changes?")
# Layout
cGridSizerAa.AddMany([
(self.btnSQL, 0, wx.ALL | wx.ALIGN_CENTRE, 0),
(self.btnAddData, 0, wx.ALL | wx.ALIGN_CENTRE, 0),
(self.tc_Homy, 0, wx.ALL | wx.ALIGN_CENTRE, 0),
(self.btnDisp, 0, wx.ALL | wx.ALIGN_CENTRE, 0),
(self.btnSaveSQL, 0, wx.ALL | wx.ALIGN_CENTRE, 0),
(self.btnSpare, 0, wx.ALL | wx.ALIGN_CENTRE, 0)
])
# POS = (x, y), (r, c) = SPAN
pGridSizer.AddMany([
(self.labelSQL_1, (0, 0), (1, 1), wx.ALL|wx.EXPAND),
(self.labelSQL_2, (0, 1), (1, 1), wx.ALL|wx.EXPAND),
(self.labelSQL_3, (1, 0), (1, 1), wx.ALL|wx.EXPAND),
(self.labelSQL_4, (1, 1), (1, 1), wx.ALL|wx.EXPAND),
(self.labelSQL_5, (2, 0), (1, 1), wx.ALL|wx.EXPAND),
(self.tc_SQL, (2, 1), (4, 6), wx.ALL|wx.EXPAND),
(cGridSizerAa, (6, 1), (1, 1), wx.ALL|wx.EXPAND)
])
pGridSizer.AddGrowableCol(1)
mainSizer.Add(pGridSizer, 0, wx.ALL | wx.EXPAND, 0)
self.SetAutoLayout(True)
self.SetSizer(mainSizer)
self.Layout()
#### Utilites------------------------------------------------------------
# None
#---------------------------------------------------------
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, "SQL test")
frame.Show(True)
self.SetTopWindow(frame)
return True
def main():
app = MyApp(False)
app.MainLoop()
if __name__ == '__main__':
main()
#### END